인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

Vanellope i님의 프로필 이미지
Vanellope i

작성한 질문수

[유니티 레벨 업!] 모듈식으로 개발하는 퀘스트&업적 시스템

다운캐스팅 에러?

작성

·

368

0

안녕하세요

궁금한게 있습니다.

강의에서 Quest ScriptableObject를 Instantiate()로 복제를 하는데

상속받은 Scriptableobejct에 다운캐스팅을 하면 null이 되는데 왜그러는지 모르겠습니다.

 

예를들어

A 라는 scriptableobject가 있고

B : A 라는 상속받은 scriptableobject가 있을떄

A a = new A(); 를 생성하고

a.num = 10;을 한 상태에서

B b = Instantiate(a) as B;

b.Id = 2;

이렇게하면 b는 null이 됩니다.

제가 원하는건 b.num = 10; 이고 b.id = 2;인 데이터가 생성되는것인데

a는 null이 아닌데 다운캐스팅만 하면 null이 됩니다 ㅜㅜ

 

답변 1

0

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

안녕하세요.

뭔가 착각을 하신듯합니다. B가 아닌 A를 생성하셨으니 B로 Casting이 안되는 것입니다. 상속 관계라고해서 무조건 Casting이 되는게 아닙니다. 실제 상속 관계에 있는 하위 객체를 생성하셔야 위로 올라갔다, 아래로 내려오는 Down Casting이 가능합니다. 원하시는대로 작동하려면 다음과 같이 코드를 작성하시면 됩니다.

A a = ScriptableObject.CreateInstance<B>() as A;
a.num = 10;
B b = Instantiate(a) as B;
b.id = 2;

감사합니다.

Vanellope i님의 프로필 이미지
Vanellope i
질문자

아하 감사합니다 잘못 이해하고있었네요 ㄷㄷ

Vanellope i님의 프로필 이미지
Vanellope i

작성한 질문수

질문하기