작성
·
961
0
C# 에서는 상관없지만 해당 상속 하는것을 유니티에 적용하니 모노비헤이비어를 상속하면 생성자를 두번 실행하는데 이런 경우 유니티에서 강의처럼 base 를 활용할수있는 방법은 없을까요 ??
답변 3
0
생성자가 두 번 실행되는 것은
딱히 상속 관계나 base가 문제가 있어서 그런 것은 아니고,
MonoBehavior를 붙여서 Component로 동작하고 있기 때문입니다.
실제 게임을 실행하지 않고
Hierarchy에 빈 GameObject를 만들어서 Component 스크립트를 붙여도,
생성자는 호출되는 것을 알 수 있는데요.
- 일종의 프리팹을 만들어서 (생성자 호출+1)
- 걔를 다시 Instantiate하면 (생성자 호출+1)
생성자가 2번 호출 될 수 있습니다.
즉 base 나 상속 문법 때문에 그런 것이 아니라는 것이죠.
다음과 테스트 해보시면, 생성자가 1번만 호출되는 것을 확인 가능합니다.
1) Test 스크립트를 만들어서 빈 게임 오브젝트에 붙임
2) Start에서 Knight Component 붙이기
3) Knight는 Creature(int hp) 생성자를 호출
4)
5) 로그상 생성자는 1번 호출되는 것 확인.
0
현재강의처럼
public Knight() : base(Define.PlayerType.Knight) 을 유니티에서 사용할려고하니까
제일 상단에있는 (할아버지 ? ) 클래스에서 모노비헤이비어를 상속받으면
생성자를 두번 실행하게되더라구요 .. 이런경우는 어떻게 해결해야하는지 궁금합니다..
현재는 모노비헤이비어를 상속받는 PlayerController 안에
해당 Knight 클래스를 new 해서 사용하고있습니다.
0
질문이 잘 이해가 안가는데요.
모노비헤이비어를 상속하면 생성자를 두번 실행하는데 이런 경우 유니티에서 강의처럼 base 를 활용할수있는 방법은 없을까요
-> 여기서 생성자를 두 번 실행한다는게 어떤 의미일까요?
Component도 마찬가지로 상속 구조를 이용할 수 있습니다.
PlayerController : BaseController 상속을 받고,
BaseController : MonoBehavior와 같은 상속 구조를 앞으로 사용하게 됩니다.
답변 정말 감사합니다
그렇다면 기존에 Inspector 창에서 Add Component 로 클래스를 집어넣는방식이아닌
다른 더미 클래스의 스타트 함수에서 위와같이 Add Component 를 해서 사용해야할까요??
( 해당 상속 클래스를 ( 스켈레톤 , 슬라임 ,오크 )프리팹 컴포넌트에 집어넣어 불러오는 방식을 할려고합니다.)