Plane에다가 스크립트를 추가하여, 하위로 여러개의 객체를 추가하는 스크립트를 구현하여 사용중이었고, 해당 객체들을 Button으로 제어하려다보니, Canvas를 별도로 하나 두게 되었다.
추가한 Canvas에서 스크립트를 추가하여, 각 Button을 제어하는 리스너를 등록해서 사용하던 중 문제가 하나 생겼다.
Plane 스크립트에서 추가한 객체들을 FindGameObjectsWithTag 함수를 이용해 배열형태로 들고와서, Canvas 스크립트의 Start() 구문에서 사용하려고 하니, 배열 개수가 계속 0이 찍히는 이슈였다.
아무래도 Plane 스크립트의 Start 함수에서 객체를 로딩하는 데 걸리는 시간이, Canvas 스크립트의 Start 함수를 실행하는 시간보다 오래걸리는 것으로 보였다.
해결 방법이 없나 찾아보던 중, Awake라는 함수를 Unity 매뉴얼에서 찾게 되었다. (https://docs.unity3d.com/Manual/ExecutionOrder.html)
첫번째 Scene에서는 Start대신 Awake 함수를 사용하라는 거였고, 이건 Scene이 아닌 단순히 Object 지만, Start 함수를 Awake로 바꾸어 주었더니, 해결이 됨.
Awake 함수를 사용하는 스크립트에서 최대한 많은 리소스를 로드한 후, 그 이후 스크립트에서 가져다 쓰는 방식으로해야 할 것 같다.
'개발 > Unity' 카테고리의 다른 글
[Unity5] Random unique index from array (0) | 2017.10.24 |
---|---|
[Unity 5] Resources.LoadAll를 이용한 Sprite 가져오기 (0) | 2017.10.23 |
[Unity 5] Resources Path (0) | 2017.10.23 |