20.06.14 19:46 작성
·
1K
답변 5
5
2020. 06. 14. 20:06
안녕하세요,
굉장히 중요한 부분인데 혼동을 하시는거 같네요.
함수를 어디서 호출했는지는 딱히 상관이 없고,
정말로 객체 자체가 어떤 타입으로 처음에 생성 되었는지가 중요합니다.
3
2020. 06. 14. 21:35
Init()메서드로 인해서 부모클래스 타입으로 GameScene객체가 생성되고 <<
이건 절대 아닙니다! 내부적으로 새로 뭔가를 만드는 것은 아니고,
어떤 객체의 가상 함수를 호출하면 가상 함수 특성상,
가상 함수 테이블을 참조해서 override 된 함수가 있으면 그 버전으로 호출하게 됩니다.
3
2020. 06. 14. 21:01
저도 저런식으로 따로 테스트 해보긴 했는데 BaseScene.cs의 Awake()에서 실행한 Init()이
Creature c = new Creature();
c.Test();
이런식으로 실행되는거라고 생각해버렸네요.
그럼 유니티 내부적으로
BaseScene b = new GameScene();
b.Init();
이렇게 실행되는 것으로 이해하면 되는건가요? 뭔가 GameScene은 Start()나 Awake()메서드도 없는데 부모클래스의 Awake()메서드 안에서 실행한 Init()메서드로 인해서 부모클래스 타입으로 GameScene객체가 생성되고 Init()이 실행된다는게 어렵네요.
다형성 부분이 공부가 아직 부족한것같습니다.
항상 친절하고 빠른 답변 감사합니다!