Unity/Problems

2020-05-09 Component, Class, GameObject 개념의 모호

J월드 2020. 5. 9. 13:16

강사님의 코드 이 부분에서 이해가 전혀가지 않는 부분이 생겼다.

API를 그대로 갖다쓰는데 API의 구동원리를 알고 싶은게아니라, Component와 Class, GameObject 개념이 모호해서

코드를 읽을수가 없다.

내가 생각한건..

 

1번째. GameObject 형식인 heroGo에 Hero라는 Component를 AddComponent한다.

2번째. Hero 사용자정의 형식인 hero에 1번째 했던 값을 넣는다.(why? 반환하기 위해)

3번째. GameObject 형식인 modelGo의 부모를 heroGo로 지정한다(상속).

4번째. 2번째 값을 넣어놓은 Hero 사용자정의 형식인 hero 를 반환한다.

 

여기서 2번째 코드

Hero hero = heroGo.AddComponent<Hero>(); 에서 왜이게 hero에 담길수가 있는지?? 의문..

@추측 : <Hero>라는 것을 봐서 형식을 Hero로 강제시킨다라고 추측

 

3번째

modelGo.transform.SetParent(heroGo.transform);

heroGo에 modelGo를 넣었다.

 

4번째

return hero;

hero를 반환

 

결과 : modelGo가 heroGo안에 들어감.

 

------------------------------------------------------------------------------------------------------------------------

아니왜 여기서 

Hero hero = heroGo.AddComponent<Hero>(); 

hero에 heroGo.AddComponent<Hero>(); 값을 넣고 그아래에서

modelGo.transform.SetParent(heroGo.transform); 를 해주고

hero를 반환했는데, 왜 heroGo에 modelGo가 붙어있는지가 의문

 

modelGo.transform.SetParent(heroGo.transform); 이 코드로 인해,

modelGo가 heroGo에 붙었다면, 그말은

내가 생각하기엔,

Hero hero = heroGo.AddComponent<Hero>() = heroGo 라는건데,

애초에 Hero != GameObject이기 때문에 말이 안된다.

 

modelGo.transform.SetParent(heroGo.transform); 이게아니라

modelGo.transform.SetParent(hero.transform); <--이거였으면 이해가 갔는데, 

 

문제는 둘다 되는게 문제ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

그렇다면 heroGo.transform과 hero.transform 같다는것.

 

 

그렇다면 Class는뭐고, Component는 무엇이며, GameObject는 뭐라는건지...

내가 여태 생각한건 Class는 Component이며,  GameObject는 int 같은 데이터형식이라고 생각했는데,

 

----------------------------------------------------------------------------------------------------------------------------------

내논리로 코드를 읽어보면, Class와 Component가 같으니까 Component 변수(hero)에다가 GameObject(heroGo)에 Component(Hero)를 Component(Hero) 형식으로 강제로 명시적변환을 해서, 넣어놓는다.

 

그리고, GameObject(heroGo)에 다른 GameObject(modelGo)를 넣는다.

그리고 Component 변수(hero)를 반환한다.

 

반환된 Component 변수(hero)를 출력했는데, GameObject(modelGo)가 GameObject(heroGo)에 들어가있다.

심지어 GameObject(modelGo)를 Component 변수(hero)에 넣고 출력해도 GameObject(modelGo)가 GameObject(heroGo)에 들어가있다.

 

= GameObject(heroGo)와 Component 변수(hero)는 위치가 같다.

-----------------------------------------------------------------------------------------------------------------------

 

검증해본결과 내가내린 결론은 hero가 AddComponent로 heroGo와 참조되어있고, 

그로인해 modelGo를 heroGo에 붙여도 hero에서도 붙는다.

이유는 hero를 heroGo참조하고 있기때문에다.

 

이해가 안가는 부분을 쭉 적어내렸는데, 왜 더 이해가 안가는기분인지 모르겠다.