• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

다운캐스팅 에러?

23.07.18 11:00 작성 조회수 270

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

안녕하세요.

뭔가 착각을 하신듯합니다. 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;

감사합니다.

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