작성
·
42
0
else {
foreach (T compo in go.GetComponentsInChildren<T>()) {
if (string.IsNullOrEmpty(name) || compo.name == name) {
return compo;
}
}
}
public static T FineChild<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 trf = go.transform.GetChild(i);
if (string.IsNullOrEmpty(name) || trf.name == name) {
T compo = trf.GetComponent<T>();
if (compo != null) {
return compo;
}
}
}
}
else {
foreach (T compo in go.GetComponentsInChildren<T>()) {
if (string.IsNullOrEmpty(name) || compo.name == name) {
return compo;
}
}
}
return null;
}
string name =null 로 한 이유
-> enum에서 null 자체가 생성이 안되는데 저렇게 한 이유
[연계질문]
if (string.IsNullOrEmpry(name) 으로 component를 리턴하는 이유
-> 이름이 없는데 왜 해당 컴포넌트를 리턴하는지..
답변부탁드립니다.
답변 2
0
FindChild의 name의 용도는
이름을 지정해서 해당 이름에 해당하는 GameObject만 찾고 싶을 경우에 사용하는 것인데요.
반대로 이름은 비워두면, 객체의 이름은 중요하지 않고,
T 타입의 Component만 들고 있으면 무조건 리턴하겠다는 의미입니다.
++
그리고 최근에 어떤 분이 찾아주셨는데 gameObject가 빠졌네요.
if (string.IsNullOrEmpty(name) || compo.gameObject.name == name) {
0
안녕하세요, 인프런 AI 인턴입니다. 이보님께서 주신 질문에 대해 답변드리겠습니다.
string name = null
로 한 이유이 코드에서 string name = null
로 기본값을 설정한 것은 함수 호출 시에 이름을 인자로 제공하지 않아도 함수가 정상적으로 동작하도록 하기 위함입니다. FineChild
메소드는 특정 이름을 가진 Child 오브젝트를 찾기 위한 함수입니다. name
이 null
일 경우에는 이름을 기준으로 검색하지 않고, 그냥 T
타입의 첫 번째 매칭되는 컴포넌트를 반환한다는 점에서 이해할 수 있습니다. 이는 사용자가 이름을 지정하지 않았을 때 기본 동작으로, 모든 컴포넌트를 검색에서 가져오는 셈입니다.
string.IsNullOrEmpty(name)
으로 component를 리턴하는 이유if (string.IsNullOrEmpty(name) || compo.name == name)
조건은 name
이 비어있거나 지정된 경우 모두를 처리하기 위함입니다. string.IsNullOrEmpty(name)
가 참일 때, 즉 name
이 null
이거나 빈 문자열일 때, 그 경우 어떤 이름의 오브젝트든지 첫 매칭되는 컴포넌트를 반환합니다.
이와 같은 코드 패턴은 다양한 검색 유연성을 제공하는데, 특히 name
을 통한 특정 검색 기준을 제공하지 않아도 기본적으로 컴포넌트를 찾도록 하는 방식입니다. 만약 name
이 비어 있지 않다면, compo.name == name
조건을 통과한 컴포넌트만 반환하게 됩니다.
이와 관련한 유사한 질문과 답변들이 있습니다:
FindChild 질문: 동일한 FindChild
메소드의 동작에 대한 설명과 컴포넌트 이름과 관련된 자주 발생하는 오해들에 대해 다루고 있습니다.
GetComponentsInChildren과 관련된 질문: GetComponentsInChildren
메소드 사용 시 컴포넌트의 이름과 반환 동작에 관한 상세한 설명이 있습니다.
이러한 링크들을 통해 보다 명확한 해결책을 찾고보다 자세히 이해하는 데 도움이 될 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.