본문 바로가기
유니티/버그일지

[Unity]Unity의 Start호출 시점으로 인한 버그

by 개발펭귄 2018. 2. 11.

◆ Scene에서 Scene으로 데이터를 넘기는 테스트를 진행하고 있는데 데이터는 잘 넘어가나 해당 데이터를 플레이어에 적용시키려고 하면 이상하게 초기 Start() 호출값으로 초기화 되었다.

  


◆ 예를 들면

 - 캐릭터를 생성하는 클래스에서 다음과 같이 캐릭터를 생성하고, 이전 씬에서 저장한 정보를 적용시켰다.


//캐릭터 생성 클래스

Start()

{

Init();

}


Init()

{

   Character player = CreateCharacter();

   player.SetData(DataManager.LoadPlayerData());

   Debug.Log("Load Player Data");

}


//캐릭터 클래스

Start()

{

//State 및 캐릭터 속성 초기화

}


하지만 이전 씬에서 저장한 정보를 세팅한 이후에 player의 Start() 함수가 호출되었다.


유니티 문서를 찾아보니


"Start: 스크립트 인스턴스가 활성화된 경우에만 첫 번째 프레임 업데이트 전에 호출됩니다." 라고 되어있다.

(https://docs.unity3d.com/kr/current/Manual/ExecutionOrder.html)


C++의 생성자에서 초기화하듯이 Start에서 초기화를 했는데 사뭇 다른 느낌이다.


Init 호출이 끝난 시점에서 player의 start가 호출이 되니 기껏 불러온 정보가 다시 초기화 되버렸다.


Start보다 더 빨리 호출되는 Awake를 사용하거나 프로그래머가 직접 초기화 함수를 만들어 위와 같이 잘 꼬이지 않게 해야한다.




추가로 여러 객체가 있을 경우 어떤 객체의 Start가 먼저 호출될지 알 수 없다. 항상 초기화 시점을 염두해두고 코드를 짜야겠다.