Inflearn brand logo image

인프런 커뮤니티 질문&답변

이보님의 프로필 이미지
이보

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진

UI 자동화 #1

질문 드립니다. string.IsNullOrEmpty(name)

작성

·

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;
    }
  1. string name =null 로 한 이유

-> enum에서 null 자체가 생성이 안되는데 저렇게 한 이유

[연계질문]

  1. if (string.IsNullOrEmpry(name) 으로 component를 리턴하는 이유

-> 이름이 없는데 왜 해당 컴포넌트를 리턴하는지..

 

답변부탁드립니다.

 

 

 

 

답변 2

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

FindChild의 name의 용도는
이름을 지정해서 해당 이름에 해당하는 GameObject만 찾고 싶을 경우에 사용하는 것인데요.
반대로 이름은 비워두면, 객체의 이름은 중요하지 않고,
T 타입의 Component만 들고 있으면 무조건 리턴하겠다는 의미입니다.

++
그리고 최근에 어떤 분이 찾아주셨는데 gameObject가 빠졌네요.
if (string.IsNullOrEmpty(name) || compo.gameObject.name == name) {

0

안녕하세요, 인프런 AI 인턴입니다. 이보님께서 주신 질문에 대해 답변드리겠습니다.

1. string name = null로 한 이유

이 코드에서 string name = null로 기본값을 설정한 것은 함수 호출 시에 이름을 인자로 제공하지 않아도 함수가 정상적으로 동작하도록 하기 위함입니다. FineChild 메소드는 특정 이름을 가진 Child 오브젝트를 찾기 위한 함수입니다. namenull일 경우에는 이름을 기준으로 검색하지 않고, 그냥 T 타입의 첫 번째 매칭되는 컴포넌트를 반환한다는 점에서 이해할 수 있습니다. 이는 사용자가 이름을 지정하지 않았을 때 기본 동작으로, 모든 컴포넌트를 검색에서 가져오는 셈입니다.

2. string.IsNullOrEmpty(name)으로 component를 리턴하는 이유

if (string.IsNullOrEmpty(name) || compo.name == name) 조건은 name이 비어있거나 지정된 경우 모두를 처리하기 위함입니다. string.IsNullOrEmpty(name)가 참일 때, 즉 namenull이거나 빈 문자열일 때, 그 경우 어떤 이름의 오브젝트든지 첫 매칭되는 컴포넌트를 반환합니다.

이와 같은 코드 패턴은 다양한 검색 유연성을 제공하는데, 특히 name을 통한 특정 검색 기준을 제공하지 않아도 기본적으로 컴포넌트를 찾도록 하는 방식입니다. 만약 name이 비어 있지 않다면, compo.name == name 조건을 통과한 컴포넌트만 반환하게 됩니다.

유사한 질문 및 답변

이와 관련한 유사한 질문과 답변들이 있습니다:

  • FindChild 질문: 동일한 FindChild 메소드의 동작에 대한 설명과 컴포넌트 이름과 관련된 자주 발생하는 오해들에 대해 다루고 있습니다.

  • GetComponentsInChildren과 관련된 질문: GetComponentsInChildren 메소드 사용 시 컴포넌트의 이름과 반환 동작에 관한 상세한 설명이 있습니다.

이러한 링크들을 통해 보다 명확한 해결책을 찾고보다 자세히 이해하는 데 도움이 될 수 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

이보님의 프로필 이미지
이보

작성한 질문수

질문하기