예를 들어 하이어라키에 UI라는 캔버스 오브젝트랑 Characters 라는 오브젝트(껍데기)가 있고, UI 밑에는 각종 UI오브젝트들(체력바, 인벤토리 등)이 있고, Characters 밑에는 플레이어, 몬스터 등이 있다 치자.


여기서 체력바 ui가 플레이어 체력을 보고 싶은데, 그냥 단순하게 생각하면 ui 스크립트에서 GameObject.Find("Player").GetComponent<체력>(); 이런 식으로 가져오는 거겠지? 유니티 기초서적에는 이런 식으로 되어있더라고.


근데 내가 알기로 Find가 모든 오브젝트를 다 순회하는 걸로 아는데, 이러면 당연히 게임 규모가 커질수록, 즉 오브젝트가 많아질수록 부하가 커질 거 아냐. 심지어 스트링...


(물론 가까운 조손 관계면 그냥 transform.parent나 Find()로 찾으면 되겠지?)



예전에 다렉으로 할 땐 오브젝트 매니저 같은 관리자 클래스를 만들어서 걔네가 플레이어를 갖고 있고, UI는 뭐 UI매니저가 갖고 있는 식으로 만들었었거든. 당연히 내부 컨테이너 검색을 할 수 있었고. 스트링은 안 썼지만.


근데 이걸 유니티에서도 똑같이 구현해서 쓰는 게 효율적일지, 아니면 기본제공하는 transform.parent.parent.Find, GetChild, FindObjectWithType 등 이런 걸로 찾아가는 게 맞는지, 그것도 아니면 더 좋은 방법이 있는지 궁금함.


퍼블릭으로 만들고 인스펙터에서 드래그 앤 드롭으로 때려박는 방법도 있겠지만... 뭔가 우아하지가 않은 거 같아.


보통 어떻게 씀?