1. 스크립트 순서를 정하지 않고 실행했을 때

 

 

2. Edit -> Project Setting -> ScriptExcutionOrder에서 스크립트 순서를 지정했을 때

 

⬅️ 예상 Csv awake 와 Start출력 후 PlayerSelectUi의 Awake와 Start출력

 

⬅️ 출력 

지정한 순서대로 Awake 먼저 실행 후

순서대로 Start를 실행한다.

 

https://docs.unity3d.com/kr/2019.4/Manual/ExecutionOrder.html

 

이벤트 함수의 실행 순서 - Unity 매뉴얼

Unity 스크립트를 실행하면 사전에 지정한 순서대로 여러 개의 이벤트 함수가 실행됩니다. 이 페이지에서는 이러한 이벤트 함수를 소개하고 실행 시퀀스에 어떻게 포함되는지 설명합니다.

docs.unity3d.com

⬅️ 유니티의 라이프사이클을 알고있었는데도 왜 Awake 전에 Start가 실행된다고 생각했을까 ? ㅎㅅㅎ

생각해보면 당연한 실행순서인데.....

 

<코드>

- CsvParent.cs

public abstract class CsvParent : MonoBehaviour
{
    protected int _test;

    private void Awake()
    {
        Debug.Log("Csv Parent 스크립트의 Awake");
    }

    private void Start()
    {
        Debug.Log("Csv Parent 스크립트의 Start");

        F_setting();
    }

    public abstract void F_setting();
}

 

- AnimalCsv.cs

public class AnimalCsv : CsvParent
{
    public override void F_setting()
    {
        Debug.Log("이 디버깅은 animalCsv입니다 ");
    }
}

 

- PlayerSelectUi.cs

public class PlayerSelectUI : MonoBehaviour
{
    private void Awake()
    {
        Debug.Log("PlayerSelectUI 스크립트의 Awake");
    }

    private void Start()
    {
        Debug.Log("PlayerSelectUI 스크립트의 Start");
    }

}

 


3. MonoBehaviour를 상속받은 클래스를 상속받은 클래스의 이벤트 함수

: 위 스크립트에서 CsvParent는 MonoBehaviour를 상속받고있고, AnimalCsv는 CsvParent를 상속받고 있다.

여기서 AnimalCsv스크립트에 Awake()와 Start()를 추가하고 실행하게되면 ?

public class AnimalCsv : CsvParent
{
    private void Awake()
    {
        Debug.Log("AnimalCsv 스크립트의 Awake");
    }

    private void Start()
    {
        Debug.Log("AnimalCsv 스크립트의 Start");
    }

    public override void F_setting()
    {
        Debug.Log("이 디버깅은 animalCsv입니다 ");
    }
}

 

! 하위의 Awake()와 Start()만 실행된다! 

상위의 Awake()와 Start()는 실행되지 않는다. 

 MonoBehaviour를 상속받은 클래스를 상속받은 클래스의 이벤트 함수 를 사용할 때는 이러한 점에 주의해야한다. 

 


https://github.com/kimYouChae

 

kimYouChae - Overview

클라이언트 개발자 지망생입니다! . kimYouChae has 6 repositories available. Follow their code on GitHub.

github.com

 

+ Recent posts