-
[unity] DefaultExecutionOrder 란?unity/unity 공부 2024. 7. 25. 11:34
DefaultExecutionOrder
유니티에서 [DefaultExecutionOrder()] 어트리뷰트는 특정 스크립트의 실행 순서를 제어하기 위해 사용됩니다.
이는 주로 MonoBehaviour 클래스에 적용됩니다.
유니티에서 여러 개의 MonoBehaviour 스크립트가 있을 때, 각 스크립트의 Awake, OnEnable, Start 등의 메서드가 실행되는 순서는 기본적으로 예측할 수 없습니다. [DefaultExecutionOrder()] 어트리뷰트를 사용하면 이러한 메서드의 실행 순서를 지정할 수 있습니다.
[DefaultExecutionOrder()] 어트리뷰트를 적용한 스크립트는 유니티의 모든 오브젝트들 중에서 해당 스크립트가 부착된 오브젝트의 실행 순서를 제어합니다. 지정된 값에 따라 Awake, OnEnable, Start 등의 메서드가 실행되는 우선순위가 결정됩니다.
- Awake: 씬이 로드될 때, [DefaultExecutionOrder] 어트리뷰트에 지정된 값에 따라 Awake 메서드의 실행 순서가 결정됩니다.
- OnEnable: 오브젝트가 활성화될 때, [DefaultExecutionOrder] 어트리뷰트에 따라 OnEnable 메서드의 실행 순서가 결정됩니다.
- Start: Awake와 OnEnable이 모두 호출된 후, [DefaultExecutionOrder] 어트리뷰트에 지정된 값에 따라 Start 메서드의 실행 순서가 결정됩니다.
[예시 코드]
[DefaultExecutionOrder(-100)] public class ScriptA : MonoBehaviour { void Awake() { Debug.Log("ScriptA Awake"); } void Start() { Debug.Log("ScriptA Start"); } } [DefaultExecutionOrder(0)] public class ScriptB : MonoBehaviour { void Awake() { Debug.Log("ScriptB Awake"); } void Start() { Debug.Log("ScriptB Start"); } } [DefaultExecutionOrder(100)] public class ScriptC : MonoBehaviour { void Awake() { Debug.Log("ScriptC Awake"); } void Start() { Debug.Log("ScriptC Start"); } }
이 세 가지 스크립트를 각기 다른 게임 오브젝트에 부착하고 씬을 로드하면, 다음과 같은 순서로 메서드가 호출됩니다:
- ScriptA의 Awake (우선순위 -100)
- ScriptB의 Awake (우선순위 0)
- ScriptC의 Awake (우선순위 100)
그리고 Awake가 모두 실행된 후:
- ScriptA의 Start (우선순위 -100)
- ScriptB의 Start (우선순위 0)
- ScriptC의 Start (우선순위 100)
이렇게 지정된 순서에 따라 각 스크립트의 메서드들이 실행됩니다. [DefaultExecutionOrder] 어트리뷰트를 사용하면 스크립트 간의 실행 순서를 명확하게 제어할 수 있어, 특정 스크립트가 다른 스크립트보다 먼저 초기화되거나 실행되어야 하는 경우에 유용합니다.
※ 참고로 [DefaultExecutionOrder()] 를 지정하지 않으면 기본값인 0으로 간주됩니다. 우선순위 값이 0인 스크립트와 동일한 순서로 처리됩니다.
[DefaultExecutionOrder] 어트리뷰트의 값 범위는 -100에서 100으로 제한되지 않습니다. int 타입의 범위 내에서 아무 값이나 사용할 수 있습니다. 따라서 우선순위 값은 -2147483648에서 2147483647까지 지정할 수 있습니다.
'unity > unity 공부' 카테고리의 다른 글
[unity] 버텍스(vertex)와 폴리곤(poygon)의 차이 (0) 2024.08.08 [unity] Scripting Backend란? (2) 2024.07.24 [unity] .meta 파일에 대한 내용 정리 (0) 2023.09.16 [unity] scene 이동 하면 라이트 어두워지는 현상 (0) 2023.08.03 [unity] 유니티 관련 이것저것 공부 (0) 2022.10.14