ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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");
        }
    }

     

     

     

    이 세 가지 스크립트를 각기 다른 게임 오브젝트에 부착하고 씬을 로드하면, 다음과 같은 순서로 메서드가 호출됩니다:

    1. ScriptA의 Awake (우선순위 -100)
    2. ScriptB의 Awake (우선순위 0)
    3. ScriptC의 Awake (우선순위 100)

    그리고 Awake가 모두 실행된 후:

    1. ScriptA의 Start (우선순위 -100)
    2. ScriptB의 Start (우선순위 0)
    3. ScriptC의 Start (우선순위 100)

    이렇게 지정된 순서에 따라 각 스크립트의 메서드들이 실행됩니다. [DefaultExecutionOrder] 어트리뷰트를 사용하면 스크립트 간의 실행 순서를 명확하게 제어할 수 있어, 특정 스크립트가 다른 스크립트보다 먼저 초기화되거나 실행되어야 하는 경우에 유용합니다.

     

    ※ 참고로 [DefaultExecutionOrder()] 를 지정하지 않으면 기본값인 0으로 간주됩니다. 우선순위 값이 0인 스크립트와 동일한 순서로 처리됩니다.

    [DefaultExecutionOrder] 어트리뷰트의 값 범위는 -100에서 100으로 제한되지 않습니다. int 타입의 범위 내에서 아무 값이나 사용할 수 있습니다. 따라서 우선순위 값은 -2147483648에서 2147483647까지 지정할 수 있습니다.

     

    댓글

Designed by Tistory.