Unity GameObject Load Order 변경하기

FGPRJS·2022년 5월 4일

첫번째 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개의 댓글