유니티 버전 - 2022.3.17f1
목차
- RuntimeInitializeOnLoadMethod
- SceneManager.sceneLoaded
- 전체 정리(실행 순서)
RuntimeInitializeOnLoadMethod
먼저 RuntimeInitializeOnLoadMethod 입니다, 해당 어트리뷰트를 사용하는 메서드는 반드시 스태틱이여야합니다, 자세한 설명은 공식문서를 참고 바랍니다, 실행순서는 가장 아래에 기술하겠습니다
SceneManager.sceneLoaded
Unity의 씬 로드 이벤트로, 새로운 씬이 로드되었을 때 실행됩니다, 로드 방식(Single 또는 Additive)에 따라 동작이 다릅니다, 아래와 같이 콜백 메서드를 구독시키는 역할을 합니다
public static void OnLoadCompleted(UnityAction<Scene, LoadSceneMode> callback)
{
SceneManager.sceneLoaded += callback;
}
실행순서
RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSplashScreen)
RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)
씬 로드 및 GameObject 생성
Awake()
OnEnable()
RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)
SceneManager.sceneLoaded
Start()
위에서부터 빠른 순서입니다
마치며
하지만 위에서 설명한 이벤트들은, 이벤트간의 실행 순서를 보장받을 수 없습니다
예를 들어 Awake가 10개 있다면, 어떤 스크립트의 Awake가 먼저 실행될지 모릅니다, 그러므로 위의 순서를 잘 이용하여서 초기화, 참조등의 구성을 하면 좋겠습니다
또한 Edit -> Project Settings -> Script Execution Order를 사용하여 스크립트의 실행순서를 조절할 수 있으나, 게임의 코어적인 부분이 아니라면, 이것을 먼저 조절하는 것보다는 위의 순서를 이용하여 초기화, 참조등의 구성을 하는 것을 추천합니다
'코드 및 공부 > 씬' 카테고리의 다른 글
씬 전환시 해당씬의 CinemachineConfiner로 교체하기 (0) | 2024.12.23 |
---|---|
Instantiate시 오브젝트가 Addtive씬에 생기는 문제 (0) | 2024.12.11 |
씬 관리 (1) (4) | 2024.09.22 |