Unity GameObject Load Order 변경하기

FGPRJS·2022년 5월 4일
0

첫번째 Scene에서 여러가지 필수적인 요소들을 Load하고 상호간에 연결을 해야 하는 작업을 하여야 했다.

하지만, 아직 상호간에 함수가 완전히 로드되지 않은 상태로 호출하려고 하고, 그 결과 NullReferenceException이 계속 발생하였다.

각 GameObject마다 로드되는 시간이 다르기 때문에 A GameObject의 OnEnable이 시작하기 전에 B GameObject의 Awake가 작동되는 것을 보장할 수 없었다.

  • 발생한 상황
    GameManager를 생성하고, Singleton 패턴을 사용하며, DestroyOnLoad로 선언하였다.
    하지만 이 static한 GameObject를 참조해야 하는 다른 GameObject가 이 Singleton GameObject가 무엇인지 정의하기도 전에 읽어버려서 NullReferenceException이 발생했다.

해결 방법 1

정말 중요해서 DontDestroyOnLoad에 있다면, 하나의 Loading Scene을 맨 처음 만들어 놓고서 DontDestroyOnLoad객체들을 로딩하고 그 다음 Scene으로 이동해 다음 요소들을 로딩하는 2번의 로딩을 거치는 방법도 있다.

해결 방법 2

  • Edit -> Project Settings -> Script Execution Order
    위 항목으로 접근해 특정 요소들을 먼저 로딩하게 만들 수 있다.
profile
FGPRJS

0개의 댓글