inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

UI 자동화 #1

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

85

ttest

작성한 질문수 4

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를 리턴하는 이유

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

 

답변부탁드립니다.

 

 

 

 

C# unity

답변 2

0

Rookiss

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

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

0

인프런 AI 인턴

안녕하세요, 인프런 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 메소드 사용 시 컴포넌트의 이름과 반환 동작에 관한 상세한 설명이 있습니다.

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

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

UI 기능 관련 질문이 있습니다!

0

23

2

픽셀 좌표 스크린 좌표

0

25

0

전체적으로 코드 읽는게 굉장히 오래 걸리네요...

0

66

2

카메라 #2 수업 캐릭터 쓰러짐 해결

0

78

1

플레이어 움직임이 끝날때, 기울어짐 현상

0

80

1

Input 적용과 관련하여 질문 있습니다.

0

72

1

디버그 불가.. Unity에 연결 불가

0

76

1

달리기 애니메이션 에러

0

85

2

오랜만에 게임을 만들다가 사운드 관련해서 뭔가 궁금한게 있어서 봤습니다

0

63

1

GetKey 오류

0

108

2

에셋을 어디에 올려두신지 알 수 있나요?

0

104

1

재귀호출? 오류나는데 왜 이래요 ?

0

167

6

Animation blending 파라미터 계산

0

65

1

newPos와 to지점이 겹쳐져야 하는거 아닌가요?

0

94

3

오브젝트 복제하니까 자꾸 이런게 뜨면서 꺼집니다

0

85

2

질문있습니다

0

142

2

아 이거 소스코드 같은거 없나요?

0

140

3

@Managers 가 씬에 배치되어 있어도 문제가 되지 않나요?

0

133

2

유니티6 NavMesh 안되는분들

1

174

1

Unity6 Unity-Chan Material 마젠타 문제 해결법

7

523

1

GetComponent<Poolable> 질문드립니다.

0

99

2

UI 불러오지 못함

0

116

2

UI 자동화 #1 - Util.cs의 FindChild함수에서 component.name에 컴포넌트 이름이 뜹니다.

0

152

2

수업자료 다운로드 방법이 궁금합니다.

0

168

2