728x90
반응형

유니티에서 게임 오브젝트를 찾는 것은 여려가지 방법이 있지만 오늘은 Find에 대해 정리해보려고 합니다.

사실 제가 맨날 까먹기 때문이 맞습니다.

 

1. 씬에서 찾기

이 Find는 씬에 존재하는 게임 오브젝트의 이름을 찾아 해당 오브젝트를 리턴합니다.

단, 이 함수는 찾고자 하는 객체의 이름이 다른 곳에서도 쓰이고 있다면 가장 먼저 발견한 객체를 리턴하므로 Player나 GameManager 같은 유니크한 객체에 사용하는 것이 좋습니다.

GameObject.Find("오브젝트 이름");

 

2. 자식 중에서 찾기

이 프리팹은 채팅을 위한 닉네임과 메시지가 있는 채팅바인데 이 프리팹에서 닉네임과 채팅 텍스트를 받아와 값을 넣고자 합니다.

 

GameObject.Find를 사용할 때와 똑같이 이번에는 부모의 transform에서 해당 이름을 가진 자식 객체를 찾습니다.

chatPrefab.transform.Find("Nickname_Text").GetComponent<TextMeshProUGUI>().text = sender;

 

 

그런데 부모를 알고 자식이 어디에 있는지 안다면 위치만으로 알 수는 없을까요?

당연히 됩니다. GetChild(index)로 부모의 index 번째 자식을 가져올 수 있습니다.

chatPrefab.transform.GetChild(0).GetComponent<TextMeshProUGUI>().text = sender;

 

이렇게 편하지만 단점도 있습니다. 이런 방식은 부모가 자식이 아주 많고 자식의 자식 객체를 찾는 것은 못합니다.

해당 프리팹의 Content를 불러오고 싶은데 현재 위치는 맨 위입니다. 이럴 때는 어떻게 해야 할까요?

 

그럴 때는 해당 위치에서 경로를 지정하는 방식으로 가져올 수 있습니다.

gameObject.transform.Find("Chat_Popup_Container/Chat_Container/Scroll View/Viewport/Content")

 

감사합니다.

728x90
반응형

'공부 > 유니티' 카테고리의 다른 글

디스코드 자체 게임젬  (0) 2024.08.21
프로젝트 회고 - Unity Http 통신  (0) 2024.04.24
미로게임5 (22.6.15)  (0) 2024.04.22
미로게임4 (22.6.7)  (0) 2024.04.22
미로게임3 (22.6.2)  (0) 2024.04.22