스토리텔링 개발자

[UE4] 컴포넌트(Component) 본문

개발/언리얼 엔진

[UE4] 컴포넌트(Component)

김디트 2021. 7. 1. 15:51
728x90

개요

컴포넌트는 액터에 붙여서 사용하는 UObject입니다.

액터에 붙여서 사용한다는 점만 특이한, 그냥 UObject라고 봐도 무방할 듯 하네요.

 

하지만 바로 그 붙인다는 점이 무척 유용합니다.

사실 액터 클래스 내부(BP 클래스도 포함이죠)에 특정 UObject를 일일이 정의하기란 상당히 번거로운 일이니까요.

 

컴포넌트는 그냥 자체적으로 정의하고, 만들고, 붙이기만 하면 그 객체 전용이라는 걸 강조할 수 있죠.

 

굳이 현실세계로 비유하자면 이렇게 비유할 수 있을까요.

자동차열선을 추가 하려고 하는 상황이라면,

자동차 액터열선 컴포넌트를 붙이는 셈이라고 할 수 있죠.

 

 

 

다양한 컴포넌트 유형

컴포넌트는 객체에 붙어서 그 객체의 기능 자체로 사용될 수 있다는 점에 착안해서,

이미 UActorComponent 하위 컴포넌트로 다양하게 제공되고 있습니다.

 

네, 예상했겠지만 모든 컴포넌트는 UActorComponent의 자식 클래스입니다.

 

자세한 컴포넌트 종류들은 공식 문서에서 확인할 수 있습니다.

 

많은 컴포넌트들이 있지만, 중요하고 자주 만나게 되는 컴포넌트를 굳이 꼽아보자면 아래와 같습니다.

 

씬 컴포넌트(Scene Component)

 

트랜스폼(위치, 회전, 스케일)을 가지는 컴포넌트입니다.

액터는 월드 위에 존재하려면 트랜스폼 정보를 가져야 합니다.

 

그리고 또 중요한 기능.

씬 컴포넌트는 같은 씬 컴포넌트끼리 계층적으로 붙이기(Hierarchical Attachment)가 가능합니다.

 

월드에 존재하는 액터들의 계층 구조와 판박이죠.

그야 그럴것이, 씬 컴포넌트는 월드에 존재하기 위한 정보를 가진 컴포넌트들이니까요.

 

CapsuleComponent(씬 컴포넌트1)에 SkeletalMeshComponent(씬 컴포넌트2)가 붙어있다

 

여기서 액터의 최상위 ComponentRootComponent라고 하며,

이 루트 컴포넌트를 기준으로 다른 씬 컴포넌트를 붙여나갈 수 있습니다.

또한 그 루트 컴포넌트의 Transform 정보가 바로 대상 Actor의 Transform 정보가 됩니다.

 

프리미티브 컴포넌트(PrimitiveComponent)

 

SceneComponent의 자식 컴포넌트로, 충돌 또는 렌더링 관련 컴포넌트입니다.

 

 

 

빈 액터의 씬 컴포넌트 구조

 

빈 액터

액터를 끌어서 에디터에 배치하면, DefaultSceneRoot 라는 루트 컴포넌트를 가지고 있는 걸 볼 수 있습니다.

월드에 배치된 걸로 예상할 수 있듯이 이 루트 컴포넌트는 바로 SceneComponent입니다.

그리고 트랜스폼의 정보만을 가지고 있습니다.

 

이를 캡슐 컴포넌트 등 콜리전을 가지고 있는 컴포넌트 등으로 교체할 수도 있을테고,

메시 컴포넌트를 하위 계층에 붙여서 월드에 Draw 시킬 수도 있을 것입니다.

 

루트 컴포넌트를 다른 씬 컴포넌트 베이스의 컴포넌트로 교체할 수 있다

 

728x90
Comments