유니티에서 모든 스크립트의 Awake(), Start(), OnEnble()의 라이프사이클이 보장되는 줄 알았다.
하지만 클래스 A와 B가 있다고 했을 때, A의 onenable이 B의 awake보다 먼저 호출되는 현상이 있었다.
찾아보니 유니티는 스크립트간의 순서는 보장하지 않으므로
https://docs.unity3d.com/kr/2019.4/Manual/class-MonoManager.html
이 문서의 script order을 직접 세팅해주는 방식이 있다고한다.
다른 방법을 찾아보니 유니티의 Start함수를 IEnumerator 반환형으로 선언할 수 있다고 한다.
IEnumerator Start()로 선언하면 Start함수가 코루틴으로 작동해
yield return new 를 사용할 수 있다!
따라서 다른 함수에서 초기화가 먼저 되어야 하는 값들을 사용할 때
IEnumerator Start()
{
yield return new WaitUntil(()=> A.dic!= null);
A.dic["Three"]=3;
}
뭐 이런식으로 람다를 사용해 다른 함수의 초기화를 기다려 줄 수 있다!