[Unity] 스크립트 실행 순서
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를 상속받은 클래스를 상속받은 클래스의 이벤트 함수 를 사용할 때는 이러한 점에 주의해야한다.
kimYouChae - Overview
클라이언트 개발자 지망생입니다! . kimYouChae has 6 repositories available. Follow their code on GitHub.
github.com