✅ 한 것들
🎮 Project GNC
ItemTypeSO만으로는 Tablet의 정보가 없었음
- 손에 축소하여 들고 있거나, 설치할 수 있는 거라면 설치할 때 사용될 프리팹인 itemGO을 추가
- Tablet 정보가 필요할 때 itemGO에서 GetComponent로 Tablet 스크립트에 접근
- 굳이 Tablet으로 놓지 말고 GameObject 자체를 할당하고 필요할 땐 GetComponent로 접근
크래프팅 UI를 띄워야 하므로 별도 UI 매니저 만들기
- 전체 UI를 관장하는 UIManager, 크래프팅 UI, esc UI 등의 개별 Manager 구분
- 개별 Manager는 싱글톤 대신 SerializeField로 직접 참조하려고 했는데, 별도의 씬에 존재할 경우 Manager 등록이 불가능하다는 문제 발생
- 내일 더 연구
기존에 갖고 있던 싱글톤 개선
- 상속받은 곳에서 잘못 선언하면 초기화 로직 망가지는 문제
- Awake(), OnDestroy() 등은 Unity에서 Relfection으로 관리하는 Magic Method라 sealed로 override 제한 불가
- 아예 virtual을 떼고 Awake()에서 훅인 OnInit()을 호출하는 식으로 해결. OnInit()은 virtual로 선언되어 override 가능.
- 실행 순서를 보장하지 못하는 문제
- getter에서 GameObject를 만들어 거기에 스크립트를 붙이는 식으로 해결하면 원래 존재하던 오브젝트가 정보와 컴포넌트가 전부 사라져버리는 문제.
[DefaultExecutionOrder(-1000)]로 싱글톤들의 실행 순서를 직접 설정하거나 가장 먼저 실행되는 Initializer에서 순서를 제어할 수도 있겠지만 변동에 취약
- getter에서
FindObjectOfType<T>()을 통해 순서가 꼬였다면 씬에 있던 해당 스크립트를 찾아오는 식으로 해결