inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

Singleton 패턴

GetComponent에 대해서

981

lular_

작성한 질문수 7

1

이 함수가 해당 게임 오브젝트의 컴포넌트를 불러오는 함수인 거죠?

Instance = go.GetComponent<Managers>();의 경우에는

게임 오브젝트 go에 넣어진 @Managers의 Managers란 컴포넌트를 불러와서 Instanc에 넣는 거고요.

그런데 비주얼 스튜디오에서 GetComponent의 설명을 읽어보니

Component GameObject.GetComponent(systerm type type)

라고 되어 있던데 맨 앞의 Component는 왜 붙어있는 건가요?

유니티의 도큐멘테이션에서는 Component.GetComponet라고 되어 있던데 이렇게 쓰면 컴포넌트의 컴포넌트를 불러온다는 건가요???? 마치 인셉션처럼??

헷갈리네요 ㅜㅜ

C# unity

답변 1

3

Rookiss

안녕하세요,

GetComponent도 버전이 여러개가 있는데
Instance = go.GetComponent<Managers>();에서 사용한 버전은 Generic 버전입니다.
그러니까 T GetComponent<T>(); 이 버전입니다.

물론 다른 형태의 GetComponent도 있는데요.
Component GetComponent(Type type);
Component GetComponent(string type);

GetComponent(typeof(Managers)) 형태로 호출이 가능하겠죠.
그런데 여기서 앞에 Component는 왜 있는걸까요?
모든 함수는 반환 타입을 지정해야 하는데 (함수 호출이 완료되면 무엇이 반환되는지)
여기서는 GetComponent를 사용하면,
반드시 Component이라는 클래스 형식을 반환한다는 의미입니다.
그런데 Managers의 경우 Component가 아닌데? 라고 의문이 들긴 하지만,
유심히 보면 Managers는 MonoBehaviour를 상속 받았고,
MonoBehaviour는 Behaviour를, Behaviour는 Component를 상속 받은 것을 알 수 있습니다.
결국 Managers는 Component의 먼 손자 정도 된다고 볼 수 있습니다.
결국 GetComponent의 반환 타입인 Component가 의미하는 바는
반환 타입은 [Component 혹은 Component를 상속받은 클래스를 반환한다]는 의미라고 보시면 되겠습니다.

마지막으로 Component.GetComponent (앞에 .이 있는 경우)는 조금 다른 의미입니다.
GetComponent가 어떤 클래스에 정의되어 있는지를 명시해주는 것인데요.
GameObject라는 클래스 안에 GetComponent가 있으면 GameObject.GetComponent를 사용하고,
Component라는 클래스 안에 GetComponent가 있으면 Component.GetComponent를 사용하는 것입니다.
우리가 보통 사용하는건 GameObject안에 있는 함수를 사용하는데,
Component 클래스에도 동일한 GetComponent가 정의되어 있긴 합니다.
워낙 자주 사용하는 기능이다 보니 여기 저기서 사용할 수 있게 인터페이스를 열어준거라 보시면 됩니다.
(참고로 이 경우 인셉션이랑은 아~무런 상관이 없습니다 ㅎㅎ 혼동하시면 안 됩니다)

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

0

37

2

픽셀 좌표 스크린 좌표

0

33

0

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

0

74

2

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

0

84

1

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

0

83

1

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

0

75

1

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

0

82

1

달리기 애니메이션 에러

0

89

2

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

0

66

1

GetKey 오류

0

109

2

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

0

107

1

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

0

169

6

Animation blending 파라미터 계산

0

68

1

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

0

97

3

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

0

88

2

질문있습니다

0

143

2

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

0

142

3

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

0

87

2

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

0

136

2

유니티6 NavMesh 안되는분들

1

176

1

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

7

527

1

GetComponent<Poolable> 질문드립니다.

0

102

2

UI 불러오지 못함

0

119

2

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

0

155

2