BLUEPRINT INHERITANCE

블루프린트 상속 경계

상속을 쓰면 공통 기능을 모을 수 있지만, 자식 블루프린트가 부모 이벤트를 덮어쓰고 Parent Call을 빼먹으면 초기화와 로직이 조용히 사라진다. Construction Script, component 상속, 변수 기본값 변경이 어디에서 적용되는지도 함께 봐야 한다.

01

공통 책임 분리

모든 자식이 반드시 가져야 하는 초기화, 상태, 이벤트만 부모에 둔다.

예외가 많은 로직은 컴포넌트가 나을 수 있다
02

오버라이드 확인

BeginPlay, Tick, custom event를 자식에서 덮을 때 Parent Call이 필요한지 결정한다.

부모 초기화를 잃으면 증상이 늦게 나타난다
03

컴포넌트 상속

부모 component를 자식에서 수정할 수 있는 범위와 삭제 가능 여부를 확인한다.

루트 component 변경은 충돌과 이동에 영향을 준다
04

Construction Script

에디터 배치 시점과 플레이 시작 시점의 실행 차이를 고려한다.

랜덤 생성 로직은 에디터에서도 반복될 수 있다
05

기본값 추적

부모 변수 기본값 변경이 자식 override에 가려지지 않는지 Class Defaults에서 본다.

자식이 저장한 값은 부모 변경을 따라가지 않을 수 있다
Parent Call
부모 로직 보존 초기화, 바인딩, 상태 등록이 부모에 있으면 호출을 유지한다.
의도적 대체인지 누락인지 표시한다
Defaults
기본값 전파 자식에서 override한 값은 부모 변경과 독립적으로 남을 수 있다.
대량 변경 전에 diff가 필요하다
Component
구조 상속 공통 충돌체, mesh, widget component를 부모에 두면 전체 자식에 영향을 준다.
특수 자식이 많으면 결합이 커진다
Alternative
컴포넌트/인터페이스 공통 기능이 is-a 관계가 아니면 Actor Component나 Interface가 더 낫다.
상속 깊이를 줄인다

구조 확인

실행 로그 부모와 자식 BeginPlay가 원하는 순서로 실행되는지 출력한다.
기본값 비교 부모 변경 뒤 자식 Class Defaults가 예상대로 바뀌었는지 본다.
대안 질문 정말 is-a 관계인지, 기능 조합이면 컴포넌트가 나은지 묻는다.