Transform이 필요 없나?
UActorComponent
로직과 데이터만 가진다. 체력, 인벤토리, 상태 관리처럼 위치가 중요하지 않은 기능에 맞다.
필요한 책임을 먼저 고르면 상속보다 작은 컴포넌트 조합으로 Actor를 안정적으로 확장할 수 있다.
Transform이 필요 없나?
로직과 데이터만 가진다. 체력, 인벤토리, 상태 관리처럼 위치가 중요하지 않은 기능에 맞다.
위치와 부착이 필요한가?
Transform과 부모-자식 계층을 가진다. 다른 컴포넌트에 붙어 함께 이동해야 할 때 기준점이 된다.
전용 기능이 이미 있나?
렌더링, 충돌, 카메라, 카메라 거리 보정처럼 엔진이 제공하는 특화 컴포넌트를 우선 사용한다.
UPROPERTY에디터 노출과 GC 추적이 필요한 컴포넌트 포인터를 선언한다.
CreateDefaultSubobject
생성자에서 기본 컴포넌트를 만들고 이름을 고정한다.
SetupAttachment
Root, SpringArm, Socket처럼 움직임을 따라갈 부모를 연결한다.
BeginPlay월드, 컨트롤러, 다른 Actor 참조가 준비된 뒤 런타임 값을 묶는다.
Tick계속 변하는 값만 갱신하고, 불필요하면 비활성화한다.
공간이 없으면 UActorComponent, 공간과 계층이 있으면
USceneComponent, 엔진 전용 기능이 있으면 특화 컴포넌트를
선택한 뒤 생성자, BeginPlay, Tick의 책임을
분리한다.