🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

Util.FindChild<T>(gameObject, names[i], true)와 관련하여...

21.03.08 00:43 작성 조회수 358

3

안녕하세요! 강의 복습 중에 또 질문이 생겨 질문드립니다!

이전 강의에서 다른 분 질문을 통해 componet.name은 결국 Button, Text 등 T 타입의 클래스를 컴포넌트로 들고 있는 게임오브젝트의 이름을 가져온다는 것은 이해가 되었습니다.

그렇다면 Util.FindChild<T>(gameObject, names[i], true) 함수의 return 값이 T component인데

디버깅한 장면에서  _objects 딕셔너리의 Value 값이  ("PointButton{Unity.Engine.UI.Button}")로 되어 있는 건 사실은 Button Component를 return 했지만 걔는 PointButton꺼야 라는 뜻인가요..?

Get 함수를 만들 때 return 값을 다시 T로 캐스팅 하는 것을 미루어 보아

Bind 할때 objects[i] = Util.FindChild<T>(gameObject, names[i], true)에서 자동으로 Object로 캐스팅 되었다가(부모 클래스이기 때문에..?)

다시 꺼내 쓸때는 T로 캐스팅 해야하는 건가요..?

답변 2

·

답변을 작성해보세요.

1

복잡하게 생각하실 것 없이,
유니티에서 어지간한 리소스는 UnityEngine.Object를 상속받고 있습니다.
return을 다시 T로 캐스팅하는 이유는
Dictionary의 value를 Object[]로 관리하고 있기 때문입니다.
타입만 확실하다면 업캐스팅/다운캐스팅은 자유자재로 해도 무방합니다.
마치 Player, Monster와 같은 애들을 Creature로 묶어서 관리하는 것과 유사합니다.

디버깅한 장면에서  _objects 딕셔너리의 Value 값이  ("PointButton{Unity.Engine.UI.Button}")로 되어 있는 건 사실은 Button Component를 return 했지만 걔는 PointButton꺼야 라는 뜻인가요..?

네!

Bind 할때 objects[i] = Util.FindChild<T>(gameObject, names[i], true)에서 자동으로 Object로 캐스팅 되었다가(부모 클래스이기 때문에..?) 다시 꺼내 쓸때는 T로 캐스팅 해야하는 건가요..?

네!

0

김지수님의 프로필

김지수

질문자

2021.03.09

감사합니다!

채널톡 아이콘