유니티 씬 전환
Unity에서 씬을 전환할 때 생길 수 있는 이슈에 대해 다뤄보고 해결법을 알아보자.
UI 재활용
게임을 개발하다보면 동일한 UI가 여러 씬에서 사용되는 경우가 있다.
그런 경우 모든 씬에 UI를 배치하고 동일한 설정을 해주는 것은 꽤나 번거로운 일이다.
이를 해결하기 위해서는 해당 UI를 Prefab으로 만들고 필요시에 Instantiate하면 된다.
만약, 재사용될 여지가 있다면 Manager클래스 같은 곳에서 풀링하여 관리하는 것도 좋은 방법이다.
SerializedField 관리
여러 씬에서 사용되는 오브젝트들은 DontDestroyOnLoad를 통해 씬 이동시 파괴되지 않게 막는 경우가 많다.
이런 경우 해당 오브젝트에 씬에 배치된 오브젝트를 SerializedField를 이용하여 참조한 오브젝트들은 씬이 이동되었을 때 파괴되어 참조가 풀리게 된다.
참조가 풀린 상태로 한 번더 동일한 씬으로 이동한다면 nullreference 에러가 발생할 것이다.
이를 해결하는 방법은 다음과 같다.
- DontDestroyOnLoad를 사용하지 않기
- 씬 이동시 새로 생성하기 때문에 참조는 해결
- 씬 전환시 유지되어야 하는 데이터는 유지하기 쉽지 않음
- 씬 이동시 참조 문제 직접 해결
- SerializedField를 찾는 작업이 필요함
- Find함수를 활용하면 되지만 비용이 비싸기 때문에 최대한 지양
보통 DontDestroyOnLoad를 사용했다는 것은 씬 전환시 유지되어야 하는 데이터가 설정되어 있는 경우가 많을 것이다.
그렇기 때문에 두 번째 방법을 사용하는 것이 일반적인 해결법이다.