1. GameManager가 Player를 가지고있고 이걸 다른 클래스에서 접근할 수 있어야함
2. 메인화면 씬A가 있고 인게임 씬B가 있다고 가정
3. 씬A에 있는 게임매니저가 씬B로 넘어갈때 로딩 이후에 플레이어를 생성하고 이를 참조하기 시작함
로딩씬.cs
private async void Awake()
...
GameManager.Instance.CreateMainGameScene();
게임매니저.cs
CreateMainGameScene => Player = ...
4. 그리고 그 이동한 씬B에 있는 UI에서 게임매니저의 플레이어에 접근해야함. 이때 null이 발생하면서 게임매니저보다 먼저 실행됨.
씬B의 UI.cs
private void Start()
Debug.Log(GameManager.Instance.Player == null); -> 이때 플레이어가 아직 null이라고 나옴
로그 순서를 살펴봤는데 게임매니저에서 플레이어를 갖게되는 CreateMainGameScene 함수보다 UI의 Start가 더 먼저 호출됨..
프로젝트 세팅에서 스크립트 실행순서도 옮겨봤음. 그래도 똑같더라구요;
어떻게 해야할까요..
스타트 메서드에서 하지 말고 명시적으로 초기화 메서드 만들어서 호출하는게 나을듯
아하.... 아쉽긴하네요 여전히 솔직히 이해는 잘 안가긴함 ㅠㅠ 호출순서가 왜 저런식으로 되는건지... 이미 씬에 배치되어있는것부터 먼저 호출이되는건가; 내가 임의로 스크립트 순서도 변경해줬는데 저렇게되니 아쉽네..
아니면 SceneManager.sceneLoaded를 쓰거나.. async를 없애봐야 알 것 같은데.. 자세한 건 다음 고수분이 알려주실듯
Async면 비동기니까 그 사이에 다른 객체 start실행될 수 있지 - dc App