작성
·
1K
답변 5
5
저도 이 문제로 고민을 많이 했었는데요,
구글에 '객체 묵시적 형변환' 이라고 검색해보시면 언어는 비록 Java로 많이 소개되어있지만 이거랑 비슷한 개념을 설명하고 있는 곳이 많으니 확인해보시는 것도 좋을 것 같습니다.
5
안녕하세요,
굉장히 중요한 부분인데 혼동을 하시는거 같네요.
함수를 어디서 호출했는지는 딱히 상관이 없고,
정말로 객체 자체가 어떤 타입으로 처음에 생성 되었는지가 중요합니다.
3
Init()메서드로 인해서 부모클래스 타입으로 GameScene객체가 생성되고 <<
이건 절대 아닙니다! 내부적으로 새로 뭔가를 만드는 것은 아니고,
어떤 객체의 가상 함수를 호출하면 가상 함수 특성상,
가상 함수 테이블을 참조해서 override 된 함수가 있으면 그 버전으로 호출하게 됩니다.
3
저도 저런식으로 따로 테스트 해보긴 했는데 BaseScene.cs의 Awake()에서 실행한 Init()이
Creature c = new Creature();
c.Test();
이런식으로 실행되는거라고 생각해버렸네요.
그럼 유니티 내부적으로
BaseScene b = new GameScene();
b.Init();
이렇게 실행되는 것으로 이해하면 되는건가요? 뭔가 GameScene은 Start()나 Awake()메서드도 없는데 부모클래스의 Awake()메서드 안에서 실행한 Init()메서드로 인해서 부모클래스 타입으로 GameScene객체가 생성되고 Init()이 실행된다는게 어렵네요.
다형성 부분이 공부가 아직 부족한것같습니다.
항상 친절하고 빠른 답변 감사합니다!
0
하이어라키에 생성되는 @Scene : GameScene 컴포넌트
GameScene은 BaseScene(부모클래스)의 의지를 이음.
@Scene이 GameScene을 사용하므로 override된 GameScene의 Init()을 사용한다는 거군요