연휴라고?!?!
아 본가가면 그 동안 프로젝트 못하는데...
아...
아...
ㅏ...
UI 자동화 2 - 원하는 이름의 T 타입을 가진 자식 찾기
저번에 자동화 TIL 에서 Bind 와 Get 함수로
UI 오브젝트의 자식들을 검사해 원하는 UI 컴포넌트들을 사용하는 방법을 썼다.
그런데 Bind 에서 자식을 검색할 때 어떤 방식으로 검색을 할까?
그걸 알아보자.
다음은 names[i] 라는 이름의 T 컴포넌트를 가진 자식오브젝트를 찾기위해 쓰인 코드이다.
objects[i] = Util.FindChild<T>(gameObject, names[i], true);
Util 클래스는 범용적으로 쓰일 유틸리티 클래스이므로 static으로 만들었다.
그리고 다음은 실제 자식을 찾는 FindChild 함수이다.
public static T FindChild<T>(GameObject go, string name = null, bool recursive = false) where T : UnityEngine.Object
{
if(go == null)
return null;
if (recursive == false)
{
for (int i = 0; i < go.transform.childCount; i++)
{
Transform transform = go.transform.GetChild(i);
if (string.IsNullOrEmpty(name) || transform.name == name)
{
T component = transform.GetComponent<T>();
if(component != null)
return component;
}
}
}
else
{
foreach(T component in go.GetComponentsInChildren<T>())
{
if (string.IsNullOrEmpty(name) || component.name == name)
return component;
}
}
return null;
}
매개변수로 GameObject, string, bool 값을 넘겨주고 원하는 타입 <T> 를 넘겨주면 T로 반환해준다.
다음은 매개변수의 역할이다.
- GameObject는 찾고자하는 자식의 부모 오브젝트이다. 대체로 자기 자신을 넣어준다.
- string은 찾고자하는 자식의 오브젝트 이름이다.
- bool 은 자식의 자식까지 찾을 것인지에 대한 분기점이다. false일 땐 go 의 직속 자식만 검사한다.
Button을 바인드 한다고 했을 때, Bind<T>로 들어오는 값은 Button, FindChild<T> 로 들어오는 값도 Button
그리고 Bind 함수에서 Enum 의 Type을 받아 FindChild 함수에 name을 넘겨줬기 때문에
name 이라는 이름의 Button을 가진 자식을 가져올 수 있다.
물론 Button 컴포넌트가 해당 자식에게 없다면 null 값을 반환한다.
자 그럼 여기까지 원하는 T 타입의 컴포넌트를 가진 자식 오브젝트를 Bind 했고,
Get 하여 해당 컴포넌트를 불러오는 방법은 알아냈다.
그렇다면 이 UI Object를 씬에 불러오는 방법은?
그것은 UIManager 가 담당하게 된다.
그것은 내일!
이번 자동화는 연휴지만 토요일을 제외하고 매일매일 써보고자 한다.
'스파르타 내배캠' 카테고리의 다른 글
스파르타 내배캠 Unity 3기 36일차 (0) | 2024.02.13 |
---|---|
스파르타 내배캠 Unity 3기 35일차 (0) | 2024.02.09 |
스파르타 내배캠 Unity 3기 33일차 (1) | 2024.02.07 |
스파르타 내배캠 Unity 3기 32일차 (1) | 2024.02.07 |
스파르타 내배캠 Unity 3기 31일차 (0) | 2024.02.05 |