본문 바로가기

유니티 스파르타 캠프 4주차

내배캠 개인프로젝트 트러블슈팅 내용

배경

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라는 값이 누락된 것을 알 수 있었고 이를 넣어줌으로써 쉽게 해결할 수 있었습니다.