【Unity】 같은 클래스의 컴퍼넌트의 실행 순서는 첨부한 순서의 역순으로 되는 설

4781 단어 Unity
여러가지가 이 가설에 이르렀으므로 검증해 보았습니다.

다음 컴포넌트를 첨부하여 로그가 출력되는 순서를 살펴봅니다.
요약하면 부착한 순서로 컴퍼넌트에 번호가 흔들리고, Awake로 그 번호를 로그에 출력하는 느낌입니다.
using UnityEngine;

public class ComponentOrderTest : MonoBehaviour {

    public static int AllCount;

    public int count;

    void Reset() {
        count = AllCount;
        AllCount++;
    }

    void Awake() {
        print(name+":"+count);
    }

    [ContextMenu("AllCountReset")]
    public void AllCountReset() {
        AllCount = 0;
    }
}

우선 보통 하나의 객체에 5개의 컴포넌트를 부착해 보겠습니다.

결과는 다음과 같습니다. 첨부된 순서의 역순으로 실행되었습니다.


다음으로 인스펙터 상의 순서를 D&D로 적당히 정렬해 실행해 보겠습니다.

첨부된 순서의 역순으로 실행되었습니다.


다음은 여러 객체에 걸쳐 연결해 봅니다.



결과는 다음과 같습니다. 객체를 넘어서도, 첨부한 순서의 역순이 되었습니다.


다음은 컴포넌트를 3개 첨부한 오브젝트를 3개로 복제해 보겠습니다.



이렇게 되었습니다. 복제한 객체는 순서가 바뀌고 있습니다.
※오브젝트명이 나오도록(듯이) 코드를 조금 만지었습니다.

가능한 가능성은 컴포넌트가 객체가 복제될 때 첨부된 역순으로 복사되어 순서가 바뀌는가?

마지막으로 로그의 출력 타이밍을 Update로 하고, 실행중에 Enable/Disable를 전환해 봅니다.

마지막으로 Enable로 한 컴포넌트가 나중에 실행되도록 되어 있네요.

검증 결과



・기본적으로는 어태치한 순서의 역순으로 실행된다
・오브젝트마다 복제한 경우는 순서가 바뀐다
・실행중에 Enable/Disable을 전환한 경우도 순서가 바뀐다

좋은 웹페이지 즐겨찾기