배경
UI Manager(싱글톤)와 GameManger(싱글톤)를 연동하여 사용하려고 했었습니다.
발단
UIManager의 메서드를 GameManager에서 가져오려고 할 때 계속 충돌이 일어났습니다. 내용으로는 UIManager의 값을 찾을 수 없다는 내용이었습니다.
전개
문제를 해결하기 위해 아래 단계를 순차적으로 시도하였습니다.
1. 생기는 문제의 정확한 위치를 알기 위해 F9 디버깅
2. instance를 가져올 때 생길 수 있는 문제 검색.
3. 오브젝트에 붙은 스크립트에 제대로 값이 들어갔는지 확인
2번째 과정에서 알게된 원인이 있었습니다.
> 원인 : Awake의 순서를 정해주지 않았기에 생길 수 있는 문제가 있다.
이를 해결하는 방법으로 Awake를 하지 않아도 코드를 초기화해주는 방법을 검색하여 2가지를 알 수 있었습니다.
> 생성자를 통해 UIManager를 생성할 때 초기 값을 지정하여 null값이 안 나오도록 방지.
> Instance {get, set} 자동프로퍼티를 활용하여 불러올 때 Null이라면 값을 생성하도록 코드 작성
절정
1. 먼저 정적 생성자로 생성해보았고 "정적 속성, 정적 메서드 또는 정적 필드 이니셜라이저에는 'this' 키워드를 사용할 수 없습니다."라는 문제를 볼 수 있었습니다.
2. 자동 프로퍼티를 통해서 get으로 가져올 때마다 null이라면 instance를 새로이 생성하는 코드를 작성하였습니다.
결말
그럼에도 많은 검색을 했을 때, 프로퍼티를 쓰는 사람이 많지않았기에 자동 프로퍼티를 꼭 써야하는가? 싶은 의문점이 들어서 코드를 다시 차분히 확인했습니다. 내부 코드가 아닌 UIManager의 Awake에서 instance = this라는 값이 누락된 것을 알 수 있었고 이를 넣어줌으로써 쉽게 해결할 수 있었습니다.
'유니티 스파르타 캠프 4주차' 카테고리의 다른 글
25-05-02 Vector.Lerp와 깃허브 커밋 (0) | 2025.05.02 |
---|---|
2025-05-01 유니티 Collision과 Trigger의 관계 (0) | 2025.05.01 |
25-04-30 유니티 람다식의 내용 정리 (0) | 2025.04.30 |
25-04-29 유니티 애니메이터 속도와 깜빡깜빡 문제 (1) | 2025.04.29 |
25-04-28 팀 프로젝트 발표회 및 튜터님 피드백 (0) | 2025.04.28 |