문제 발견 : Player와 상호작용을 할 수 있는 객체들의 부모클래스 InteractObject와 그 자식 클래스 NPC를 작성하는 중 예상과 다르게 런타임에서 infoImage의 SetActive를 변경하는 시점에서 Null ref 에러 발생.

문제 분석. 1. infoImage를 가져오는 메서드 GetComponentInChildren이 호출되는 Awake시작점에 로그작성
-> Awake 호출됨
2. GetComponentInChildren 메소드 이후 로그 작성
-> GetComponentInChildren 호출 안됨, base.Awake에서 문제발생 확인.
3. Awake 시작점에 중단점 작성 유니티에 연결하여 런타임 점검

4. 부모클래스에서 vitual Awake에서 virtual InteractReset메서드 호출 확인
5. Override 된 NPC의 InteractReset 호출 <문제 이해>
문제점. 부모클래스에서 vitual Awake에서 virtual InteractReset을 활용하여 상태를 초기화하려고 함수를 호출 했으나, vitual의 특성상 override된 자식클래스의 메서드가 먼저 실행되면서 예상과 다른 시퀀스가 발생함. 부모클래스의 코드 작성시점과 NPC의 코드 작성 시점이 차이가 생겨서 시퀀스를 놓치게 됨.
보안방향. virtual 메서드에서 virtual 메서드를 호출하는 방식은 override 상태를 모르기에 매우 주의해야 하며 지양되는 방식으로 숙지. 코드는 메서드를 이용하지 않고 직접 초기화하는 방식으로 수정. 만약 초기화 내용이 길어진다면 private 초기화 메서드를 만들어 vitual 메서드 -> private 메서드의 시퀀스를 만드는 것이 유효할 것으로 생각함.
결론. virtual 메서드에서 virtual 메서드로 이어지는 시퀀스는 주의가 필요함.
'내일배움캠프' 카테고리의 다른 글
| [TIL] RxModel을 가시화 (0) | 2025.04.17 |
|---|---|
| TIL 240212 매니저 클래스의 싱글톤 패턴 개선 (0) | 2025.02.12 |
| TextRPG의 필수기능 기본 구조 및 분석 (0) | 2025.02.06 |
| TIL 0205 TextRPG 의존성 주입 (0) | 2025.02.05 |
| 틱택토 게임 (1) | 2025.01.25 |