[UE4] 컴포넌트(Component)
개요
컴포넌트는 액터에 붙여서 사용하는 UObject입니다.
액터에 붙여서 사용한다는 점만 특이한, 그냥 UObject라고 봐도 무방할 듯 하네요.
하지만 바로 그 붙인다는 점이 무척 유용합니다.
사실 액터 클래스 내부(BP 클래스도 포함이죠)에 특정 UObject를 일일이 정의하기란 상당히 번거로운 일이니까요.
컴포넌트는 그냥 자체적으로 정의하고, 만들고, 붙이기만 하면 그 객체 전용이라는 걸 강조할 수 있죠.
굳이 현실세계로 비유하자면 이렇게 비유할 수 있을까요.
자동차에 열선을 추가 하려고 하는 상황이라면,
자동차 액터에 열선 컴포넌트를 붙이는 셈이라고 할 수 있죠.
다양한 컴포넌트 유형
컴포넌트는 객체에 붙어서 그 객체의 기능 자체로 사용될 수 있다는 점에 착안해서,
이미 UActorComponent 하위 컴포넌트로 다양하게 제공되고 있습니다.
네, 예상했겠지만 모든 컴포넌트는 UActorComponent의 자식 클래스입니다.
자세한 컴포넌트 종류들은 공식 문서에서 확인할 수 있습니다.
많은 컴포넌트들이 있지만, 중요하고 자주 만나게 되는 컴포넌트를 굳이 꼽아보자면 아래와 같습니다.
씬 컴포넌트(Scene Component)
트랜스폼(위치, 회전, 스케일)을 가지는 컴포넌트입니다.
액터는 월드 위에 존재하려면 트랜스폼 정보를 가져야 합니다.
그리고 또 중요한 기능.
씬 컴포넌트는 같은 씬 컴포넌트끼리 계층적으로 붙이기(Hierarchical Attachment)가 가능합니다.
월드에 존재하는 액터들의 계층 구조와 판박이죠.
그야 그럴것이, 씬 컴포넌트는 월드에 존재하기 위한 정보를 가진 컴포넌트들이니까요.
여기서 액터의 최상위 Component를 RootComponent라고 하며,
이 루트 컴포넌트를 기준으로 다른 씬 컴포넌트를 붙여나갈 수 있습니다.
또한 그 루트 컴포넌트의 Transform 정보가 바로 대상 Actor의 Transform 정보가 됩니다.
프리미티브 컴포넌트(PrimitiveComponent)
SceneComponent의 자식 컴포넌트로, 충돌 또는 렌더링 관련 컴포넌트입니다.
빈 액터의 씬 컴포넌트 구조
액터를 끌어서 에디터에 배치하면, DefaultSceneRoot 라는 루트 컴포넌트를 가지고 있는 걸 볼 수 있습니다.
월드에 배치된 걸로 예상할 수 있듯이 이 루트 컴포넌트는 바로 SceneComponent입니다.
그리고 트랜스폼의 정보만을 가지고 있습니다.
이를 캡슐 컴포넌트 등 콜리전을 가지고 있는 컴포넌트 등으로 교체할 수도 있을테고,
메시 컴포넌트를 하위 계층에 붙여서 월드에 Draw 시킬 수도 있을 것입니다.