Til 32

[내배캠][Unity6기][TIL] 풀 반환 오류 트러블슈팅

대환장파티의 풀 반환 오류를 드디어 해결했다!오류의 원인이 되는 부분이 많았어서 하나하나 찾기 쉽지 않았는데 튜터님의 도움으로 해결할 수 있었다. [ 문제 상황 ]1. 풀에 이미 반환된 오브젝트가 2번 반환을 시도2. 풀에서 가져온 타입과 다른 타입으로 풀에 반환3. 풀에 반환할 오브젝트의 인덱스 에러(추후 에러 로그 정보 추가 예정) [ 문제 원인 ] 1. 미니언 반환에서 이중 반환 및 타입이 맞지 않게 반환시키는 부분이 있었다.public class Minion : Monster{ public override void ReturnToVillage() { base.ReturnToVillage(); _summonerMonster.RemoveMinion(this); ..

[내배캠][Unity6기][TIL] 코루틴 중지 트러블슈팅

게임 종료 후에도 스폰 코루틴이 계속 실행되어 전환된 Scene에 인간이 생성되는 문제가 있어 수정했다.public class HumanSpawner : SingletonBase{ public void StopSpawningHumans() { StopAllCoroutines(); // 모든 스폰 코루틴 중지 }}public class GameManager : SingletonBase{ public void ReturnObjects() { HumanSpawner.Instance.StopSpawningHumans(); }}위와 같이 스테이지가 종료 및 재시작되는 모든 상황에서 스폰 코루틴이 멈추도록 수정했다.StopAllCoroutines는 해당..

[내배캠][Unity6기][TIL] 다중 스폰 포인트

기존에 1개의 스폰포인트에서 인간이 생성되도록 설계했는데, 스테이지에 스폰포인트가 추가되며 로직을 확장성 있게 수정하였다.public class StageManager : SingletonBase{ public List StartPointList { get; private set; } // 스테이지의 시작점과 종료지점 캐싱 private void SetPointInfo() { StartPointList = new List(); GameObject[] spawnPoints = GameObject.FindGameObjectsWithTag("HumanSpawnPoint"); if (spawnPoints == null || spawnPoints.Leng..

[내배캠][Unity6기][TIL] ObjectDisposedException 트러블슈팅

[ 문제 상황 ]GameManager에서 활성화된 오브젝트들의 리스트를 관리하고 있는데ObjectDisposedException과 type is not a supported pptr value 에러가 발생했다.public class GameManager : SingletonBase{ public List activeHumans = new List(); public List activeMonsters = new List();}public class Human : MonoBehaviour{ protected virtual void OnEnable() { GameManager.Instance.activeHumans.Add(this); } protected virtu..

[내배캠][Unity6기][TIL] 데이터 로드 리팩토링 (2)

인간 데이터를 받아올 때 Human과 HumanController, 2개의 클래스에서 모두 데이터를 들고 있는 것이 불필요해 보인다는 피드백을 받았다.변경해서 사용할 데이터도 아니고 한번 받아오고 변수로 저장해 사용하고 있다.그래서 Awake 순서만 잘 맞춰서 한쪽에서 로드한 데이터를 다른 쪽에서 초기화하는 방식으로 변경했다. [ 변경 과정 ]1. Human -> HumanController 로 Awake 순서 조정(컴포넌트 추가 순서 조정, or project setting에서 변경하기)2. Human의 Awake에서 Data 받아오고 HumanController 연결3. HumanController의 데이터 세팅4. HumanController에서 데이터 불러오는 부분 삭제 [ 수정 전 ]public..

[내배캠][Unity6기][TIL] 데이터 로드 리팩토링

중간 발표 피드백을 토대로 데이터 로드 방법을 변경했다. 1. 각각의 스크립트에서 관리하지 않고 하나의 DataManager에서 로드하여 관리2. SO 사용하지 않고 불러온 json 데이터 바로 사용3. 여러 파일(namespace) 분리하지 않고 하나의 파일에서 sheet(class)를 분리하여 테이블 관리 WaveData는 하나의 테이블로 병합했으면 좋겠다고 하셔서 idx를 1000번대로 만들어 식별하도록 만들었다.처음에 StageId와 WaveIdx 2개를 기반으로 찾으려고 하니 StageId가 중복되어 Dictionary key 값을 새로 만들어줘야 하는 문제가 있었다. 그래서 그냥 WavdIdx를 1000번대로 만들어 데이터를 가져오고 HumanSpawner 측에서 계산하여 식별하도록했다. Aw..

[내배캠][Unity6기][TIL] 동적 생성 메서드 경로 설정 리팩토링

Resources.Load로 동적 생성을 할 때 Resource 폴더 내 경로를 통해 오브젝트를 가져온다.이때 메서드 내에 경로 설정을 해놓은 경우 오타 발생 시 문제점을 한 번에 파악하기 어렵고, 폴더 이동 시 해당 메서드 내 문자열을 찾아 변경해주어야 하므로 유지보수가 힘들다.const string으로 경로명을 변수처럼 사용하면 이러한 문제점을 해결할 수 있다. [ 수정 전 ]public class UIManager : SingletonBase{ public T Show(string path) where T : UIBase { string uiName = typeof(T).ToString(); UIBase go = Resources.Load(path + uiName..

[내배캠][Unity6기][TIL] 게임 로직 리팩토링

게임 종료 로직과 풀에 활성화된 오브젝트를 반환하는 로직을 이벤트로 관리했는데, 이벤트가 여기저기 흩어져 있어 한번에 파악이 어려워졌다. 이벤트가 아닌 GameManager에서 관련 로직을 관리하게 만들어 한번에 파악하기 쉽도록 변경했다.public class GameManager : SingletonBase{ public List activeObjects = new List(); protected override void Awake() { base.Awake(); // 매니저 중 DontDestroyOnLoad 인 인스턴스만 주석 활성화하여 사용 DontDestroyOnLoad(this); } private void ..

[내배캠][Unity6기][TIL] 이중 콜라이더 트러블슈팅

특정 위치에서만 인간이 몬스터를 계속 공격하거나, 한번만 공격하거나 공격하지 않고 지나가는 문제가 있어서 튜터님께 도움을 요청드렸다. 그전에 디버그도 찍어보고 인스펙터로 런타임에서 확인했을 때는 인간이 전투 상태에 들어갔다가 다시 걷기 상태로 전환되는 이상 현상을 도무지 알 수 없었다... 그것도 다른 위치에서는 다 정상 작동하는데 특정 위치에서만 현상이 나타나는 것도 이해할 수 없었다. [ 문제 현상 ]특정 위치에서 인간이 몬스터를 한번만 공격하고 지나감(다른 위치에서 한번에 몰려올때나 밀려서 지나갈 때는 그냥 지나가거나 정상적으로 전투를 하기도 함) [ 문제 원인 파악(디버깅) ]1. 특정 위치에서 인간이 BattleState에 있다가 바로 WalkState로 전이되는 것을 디버그 로그로 확인2. 인..

[내배캠][Unity6기] 모의 면접 준비 (2)

- 자기 소개에서 면접관의 질문을 유도할만한 경험을 제시 (포폴과 이력서에서도 마찬가지)- CS는 꾸준히 챙겨서 공부하기, 하루에 2개 정도의 개념 공부하는 것을 추천!- 마지막 멘트에서 회사에 입사하고 싶다는 것을 적극적으로 어필하기-- 회사에 대해 궁금한 점들을 질문해 관심이 있다는 사실을 표현 (ex. 입사하면 구체적으로 어떤 직무를 맡을지 등)Q. 유니티 생명주기 함수에 대해 서술하세요.A.게임 오브젝트와 스크립트가 실행되는 일련의 순서를 관리하는 사이클Awake, OnEnable, Start, Update, FixedUpdate, LateUpdate, OnDisable, OnDestory초기화 단계:Awake: 게임 오브젝트가 활성화될 때 가장 먼저 호출되며 의존성 설정 등 초기화 작업에 사용O..