[TWIL] 멋쟁이사자처럼 부트캠프 4

용준·2024년 10월 8일

Study

목록 보기
17/22

영상 :


스크립트 우선 순위 (초기화 순서) 조절

플랫폼 게임처럼 여러 스테이지가 존재할 경우, 각 스테이지의 레벨 데이터를 프리팹화한 후, 게임매니저(GameManager)를 통해 해당 데이터를 불러오는 방식이 일반적이다.

하지만 플레이어와 카메라 같은 오브젝트가 스테이지 로딩 시 초기화된다면, 게임매니저는 이들을 자동으로 컴포넌트에 연결하지 못하고 Missing 상태가 된다.

그 후 레벨 데이터 스크립트에서 초기화가 이루어지면 다시 오브젝트가 연결되긴 하지만, 만약 레벨 데이터의 초기화 함수를 Start가 아닌 OnEnable이나 Awake에서 사용한다면 문제가 발생할 수 있다.

이유는, Unity의 Life Cycle에 의해 레벨 데이터 스크립트의 초기화가 게임매니저보다 먼저 실행되기 때문이다. 그 결과, 게임매니저가 아직 준비되지 않은 상태에서 레벨 데이터를 불러오게 되고, Missing 오브젝트에 대한 참조 오류가 발생한다.

이 문제를 해결하는 방법은 다음과 같다.

  • Project Settings - Script Execution Order에서 스크립트의 우선순위를 조절하여, 게임매니저가 레벨 데이터보다 먼저 실행되도록 설정한다.

혹은

  • 레벨 데이터 스크립트 내 초기화 함수를 Start에서 실행되도록 변경하여, 게임매니저가 준비된 후에 레벨 데이터가 초기화되도록 한다.
    void Start() // void Awake() 대신 우선순위가 느린 Start 함수 사용
    {
        GameManager.instance.player = player;
        GameManager.instance.cinemachine = cinemachine;
    }

이 두 가지 방법을 통해 게임매니저와 레벨 데이터 간의 참조 문제를 해결할 수 있다.


0개의 댓글