◆ 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가 먼저 호출될지 알 수 없다. 항상 초기화 시점을 염두해두고 코드를 짜야겠다.
'유니티 > 버그일지' 카테고리의 다른 글
[Unity] OnDestroy에 처리할 내용은 다른 함수에 (0) | 2020.05.18 |
---|---|
[C#][Unity]List에서 원소 제거시 주의할 점 (0) | 2020.04.07 |
Trigger가 발동되지 않는 경우 (0) | 2020.03.27 |
[Unity]에디터 확장한 프로젝트가 빌드 실패할 때 (2) | 2020.02.26 |
[Unity]error: 프리팹의 parent 변경할 때 실수 조심 (4) | 2019.10.20 |