2024년 1월 24일 수요일

GameObject (creation order) 생성 순서에 대한 고찰

#unity change order GameObject

 Unity 를 사용하면서 Awake나 Start 함수에서 다른 GameObject 상태를 살피는 경우가 종종 있습니다.

그런데 간혹 잘되던 상태가 종종 오동작하는 경우가 있어서 Object 생성 순서와 관계가 있을것 같아서 조사해 보았습니다.

구글링을 했을때는 마땅한 결론이 없어서 이것 저것 테스트 해보았습니다.

Hierarchy 에서 게임 Object를 순서대로 만들었습니다. 이름은 혹시 몰라 A,B,C,1,2,3,c,b,a 순서로 지었습니다.

그리고 Test Code에서는 Awake 진입하면 Object 이름이 출력되도록 로그를 넣었습니다.


실제 테스트를 하게되면 아래와 같은 형태로 나옵니다.

순서는 오래전 생성된것이 처음에 나오고 마지막에 추가된 Obejct가 마지막에 나옵니다.

Hierarchy 에서 순서를 마구 섞어 보았습니다.


순서는 바뀌지 않았습니다.


혹시 몰라서 Alphanumeric Sorting 기능도 건들어봤습니다.


전혀 변화가 없습니다.


지금부터는 순서를 변화 하는 방법입니다.

동일한 기능을 하는 새 스크립트를 만들어서 추가했습니다.

수정된 Object가 가장 처음으로 올라오는 변화가 일어납니다.

그렇다면 여기에서 다시 예전 스크립트로 돌린다면 순서가 예전으로 돌아가는지 확인해 보았습니다.


한번 변화된 순번은 원복되지 않습니다.

이번에는 script component 를 삭제했다가 다시 추가해 보았습니다.


처음으로 올라갑니다.



결론 : 변화가 있는 GameObject가 제일 마지막에 생성됩니다. (여기에서는 컴포넌트 변화를 주었습니다.)
순서를 변경하려면 최악의 경우 위와 같이 해야하지만, 실제는 Object 생성 순서에 영향이 없도록 Awake와 Start를 조합해서 잘 설계하는 것을 추천합니다.



댓글 없음:

댓글 쓰기