인프런 커뮤니티 질문&답변
생성자에 대해서 질문좀요!
작성
·
1.1K
0
C# 에서는 상관없지만 해당 상속 하는것을 유니티에 적용하니 모노비헤이비어를 상속하면 생성자를 두번 실행하는데 이런 경우 유니티에서 강의처럼 base 를 활용할수있는 방법은 없을까요 ??
퀴즈
TextRPG2에서 Creature 클래스를 도입한 주된 이유는 무엇일까요?
플레이어와 몬스터를 구별하기 위해
반복되는 코드(HP, 공격력 등)를 재사용하기 위해
파일을 분리하여 관리하기 위해
플레이어 타입(기사, 궁수 등)을 정의하기 위해
답변 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 를 해서 사용해야할까요??
( 해당 상속 클래스를 ( 스켈레톤 , 슬라임 ,오크 )프리팹 컴포넌트에 집어넣어 불러오는 방식을 할려고합니다.)