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

멍텅구리님의 프로필 이미지
멍텅구리

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문

TextRPG2 몬스터 생성

생성자에 대해서 질문좀요!

작성

·

961

0

C# 에서는 상관없지만 해당 상속 하는것을 유니티에 적용하니 모노비헤이비어를 상속하면 생성자를 두번 실행하는데 이런 경우 유니티에서 강의처럼 base 를 활용할수있는 방법은 없을까요 ?? 

답변 3

0

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

생성자가 두 번 실행되는 것은
딱히 상속 관계나 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번 호출되는 것 확인.

멍텅구리님의 프로필 이미지
멍텅구리
질문자

답변 정말 감사합니다

그렇다면 기존에 Inspector 창에서 Add Component 로 클래스를 집어넣는방식이아닌

다른 더미 클래스의 스타트 함수에서  위와같이 Add Component  를 해서 사용해야할까요??

( 해당 상속 클래스를  ( 스켈레톤 , 슬라임 ,오크 )프리팹 컴포넌트에 집어넣어 불러오는 방식을 할려고합니다.)

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

생성자에서 3중 for문으로 엄청나게 복잡한 알고리즘을 실행하는게 아닌 이상,
그 정도로 신경쓰실 필요는 없습니다.

멍텅구리님의 프로필 이미지
멍텅구리
질문자

아하 감사합니다 ㅎㅎ !!

0

멍텅구리님의 프로필 이미지
멍텅구리
질문자

현재강의처럼 

  public Knight() : base(Define.PlayerType.Knight) 을 유니티에서 사용할려고하니까

제일 상단에있는 (할아버지 ? ) 클래스에서 모노비헤이비어를 상속받으면

생성자를 두번 실행하게되더라구요 .. 이런경우는 어떻게 해결해야하는지 궁금합니다..

현재는 모노비헤이비어를 상속받는 PlayerController  안에 

해당 Knight 클래스를 new 해서 사용하고있습니다. 

0

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

질문이 잘 이해가 안가는데요.

 모노비헤이비어를 상속하면 생성자를 두번 실행하는데 이런 경우 유니티에서 강의처럼 base 를 활용할수있는 방법은 없을까요

-> 여기서 생성자를 두 번 실행한다는게 어떤 의미일까요?
Component도 마찬가지로  상속 구조를 이용할 수 있습니다.
PlayerController : BaseController 상속을 받고,
BaseController : MonoBehavior와 같은 상속 구조를 앞으로 사용하게 됩니다.

멍텅구리님의 프로필 이미지
멍텅구리

작성한 질문수

질문하기