강의

멘토링

로드맵

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

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

작성한 질문수

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

TextRPG2 몬스터 생성

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

작성

·

1.1K

0

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

퀴즈

TextRPG2에서 Creature 클래스를 도입한 주된 이유는 무엇일까요?

플레이어와 몬스터를 구별하기 위해

반복되는 코드(HP, 공격력 등)를 재사용하기 위해

파일을 분리하여 관리하기 위해

플레이어 타입(기사, 궁수 등)을 정의하기 위해

답변 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와 같은 상속 구조를 앞으로 사용하게 됩니다.

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

작성한 질문수

질문하기