오늘은 튜터님과의 면담, 최종 프로젝트 병합 작업을 진행했다.
PM은 아무래도 신입을 뽑지 않음(전체적인 프로세스를 알아야 하기 때문). 기획자, 디자이너는 포트폴리오 준비 시 직군의 특수성에 따라 준비를 해야 할 것. 신입을 채용하기는 한다.
똑같이 엑셀을 SO로 만들어서 관리를 하심. 규모가 있는 게임의 경우 서버가 필요하기 때문에, 엑셀에 있는 데이터를 서버로 보내는 방식으로. CSV 방식?
엑셀을 사용하는 이유 : PM이나 기획자 분들이 밸런싱을 할 때, 지표를 보며 고치기 용이하기 위해 엑셀을 사용한다.
Start나 Awake에서 해야될 일들을 Init() 함수를 만들어서 해당 기능을 총괄하는 Manager에서 Start, Awake 진행 후 Init() 함수들을 불러 순서를 조절한다.
프로젝트마다 대표적으로 주요 사례를 3가지 정도만 잘 정리를 하기. 너무 많아도 안 본다.
보통 일반적으로 많이 물어보는 것이 ‘주변에 같이 작업을 했던 팀원들이 나에 대해서 어떻게 말할 것 같냐.’ 에 대해 많이 물어보심. 이 사람이 그동안 주변 사람들에게서 어떤 평을 들으며 작업을 했는지 알 수 있기 때문. 자기 소개, 포트폴리오 내용에 따라서 어떻게 문제 해결을 했는지, 말로써 설명을 하도록. 본인의 장단점!
오늘 발생한 문제 중, 등록한 이벤트를 해제하기 위해 OnDestroy나 OnDisable에서 싱글톤 Instance를 호출하는 코드를 작성했었다.
private void OnDisable()
{
InventoryController.Instance.nextStage -= RemoveAllItems;
DungeonManager.Instance.OnStageEnd -= SetConsumableDuration;
}
그런데, 이렇게 코드를 작성하면 유니티 게임 종료 시 에러가 발생을 했다.
OnDestroy에서 객체를 생성하고 있지 않냐는 유니티의 에러였다. 고민해본 결과, 싱글톤을 하기 위해 작성한 Instance를 return 하는 코드에서 Instance를 생성할 가능성이 있기 때문에 발생하는 문제인 것 같다.
public class SingletoneBase<T> : MonoBehaviour where T : MonoBehaviour
{
// 프로퍼티
private static T _instance;
public static T Instance
{
get
{
if (_instance == null)
{
string typeName = typeof(T).FullName;
GameObject go = new GameObject(typeName);
_instance = go.AddComponent<T>();
DontDestroyOnLoad(go);
}
return _instance;
}
}
...
}
SingletoneBase에서 싱글톤을 만들기 위해 Instance를 Get할 때, _instance가 null일 경우 새로 객체를 생성할 수 있기 때문에 에러가 발생하는 것 같다.
이를 해결하기 위해 미리 캐싱을 해서 사용하는 방식으로 했다.
DungeonManager _dungeonManager;
...
private void OnDisable()
{
InventoryController.Instance.nextStage -= RemoveAllItems;
_dungeonManager.OnStageEnd -= SetConsumableDuration;
}