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

Hyobin Kim님의 프로필 이미지
Hyobin Kim

작성한 질문수

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

UI Manager #2

this 키워드

작성

·

343

0

글 쓰다 보니까 절로 답을 찾은거 같지는 한데 혹시나 해서 확인 부탁드립니다

Managers.UI.ClosePopupUI(this);

이 코드는 UI_Popup 스크립트를 컴포넌트로 가진 게임오브젝트를 인자로 넣겠다는 뜻이죠?

답변 3

2

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

ClosePopupUI는 인자로  UI_Popup을 받고 있으니,
UI_Popup 스크립트를 상속받은 Component를 인자로 받겠다는 의미가 됩니다.
(게임오브젝트를 인자로 받을 것이었으면 GameObject로 받아줘야 합니다.)

Component는 반드시 GameObject에 기생하는 형태로 동작하기 때문에
GameObject를 인자로 받는 대신 이렇게 원하는 특정 Component를 받아주면 편리합니다.

그리고 Component 내부에서는 gameObject을 이용해 자기가 소속된 GameObject에 접근할 수 있고,
GameObject도 마찬가지로 GetComponent<T>를 이용해 Component를 찾을 수 있으니
언제라도 필요하면 Component <-> GameObject 사이를 왔다 갔다 할 수 있습니다.

1

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

현재 코드에서는 gameObject를 그냥 날려주고 있습니다.
GameObject + Component는 세트라서 굳이 하나만 없앨 이유는 없습니다.

Component'만' 삭제하기 위함이라기 보다는
정말로 그 GameObject가 해당 Component를 들고 있다는 것을
보장할 수 있기 때문에 편리합니다.
가령 UI_Popup Component를 인자로 받는다면,
UI_Popup을 상속받은 Component를 지니고 있지 않은
GameObject는 애당초 후보군에서 제외되겠죠

0

Hyobin Kim님의 프로필 이미지
Hyobin Kim
질문자

ClosePopupUI는 인자로  UI_Popup을 받고 있으니,
UI_Popup 스크립트를 상속받은 Component를 인자로 받겠다는 의미가 됩니다.
(게임오브젝트를 인자로 받을 것이었으면 GameObject로 받아줘야 합니다.)

만약에, UI_Popup 클래스를 상속받는 다른 클래스에서 ClosePopupUI()를 호출하면, 그 차일드 클래스의 componenet가 지워지는거죠?

 Component는 반드시 GameObject에 기생하는 형태로 동작하기 때문에

GameObject를 인자로 받는 대신 이렇게 원하는 특정 Component를 받아주면 편리합니다.

이게 편리한 이유는 특정한 Component만을 없애고, 그 Component를 들고 있던 GameObject는 살릴수 있으니까 그런거죠?

Hyobin Kim님의 프로필 이미지
Hyobin Kim

작성한 질문수

질문하기