Unreal 5/디자인 패턴 및 주요 개념

[Unreal 5] Component 에 대해

트릭시 2024. 4. 1. 14:45

언리얼 엔진에서 컴포넌트는 정말 여러 가지가 있습니다.

이번에는 가장 베이스가 되는 두 개의 유형을 살펴보겠습니다.

 

1. Scene Component

 

 

씬 컴포넌트의 설명을 보면 다른 씬 컴포넌트에 추가할 수 있는 컴포넌트이며, 씬 트랜스폼을 갖고 있다고 합니다.

 

여기서 중요한 점은, "트랜스폼" 을 갖고 있다는 부분과 다른 "씬 컴포넌트" 에만 추가할 수 있다는 점 입니다.

Transform 이란, 해당 월드 혹은 레벨 내에서 특정 액터의 위치, 회전, 스케일 벡터 등을 나타내는 데 사용합니다.

 

 

 

예를 들어 이 큐브의 디테일 패널을 보면, 우측 하단에 Transform 이라고 되어 있는 상태창이 보일 겁니다.

이것이 바로 트랜스폼입니다. 이는 언제나 자신의 '부모' 가 되는 액터로부터 자신이 얼마만큼 변화되어 있는지를

Location, Rotation, Scale 세 가지로 표현해 준다고 볼 수 있습니다.

 

즉, 이렇게 트랜스폼이 존재하는 것이 바로 씬 컴포넌트이고

반대로 말하자면 트랜스폼이 존재한다면, 그것은 씬 컴포넌트를 상속했기 때문이라고 할 수 있겠죠.

 

 

 

또한, 이런 식으로 씬 컴포넌트 앞에는 산이 솟은 것 같아 보이는 아이콘이 표시되게 됩니다.

 

 

그러나, 블루프린트 에디터를 열어서 가장 처음 보게 되는 Default Scene Root 컴포넌트의 트랜스폼 패널을 보면

Scale 밖에 보이질 않는데, 이는 앞서 말한 트랜스폼의 성질을 생각해보면 이해가 갑니다.

 

자신의 '부모' 로부터 자신의 상대 벡터를 나타내는 것이 트랜스폼이지만, 현재 블루프린트 씬 내에서는

부모가 자기 자신이죠. 그렇기 때문에 상대 위치나 회전을 나타낼 수가 없습니다. 따라서, 스케일 값만 존재하게 되는 것이죠.

 

 

때문에, 그 아래에 Shape 를 추가해 보면 이제는 아래와 같이 Scene Root (부모) 에 대한 위치나 회전 값을 조절할 수가 있게 됩니다.

 

 

 

이런 식으로 렌더가 되고 표시할 수 있는 것들이 Scene Component 다 라는 것을 이해하면 좋을 것 같습니다.

 

 


 

2. Actor Component

 

 

액터 컴포넌트는 이 설명에서도 알 수 있듯이, 어떤 액터에게도 추가할 수 있는 재사용 가능한 컴포넌트 라고 되어있습니다.

 

 

마우스를 드래그 해 보면, 힌트에 위와 같이 적혀 있습니다.

씬 컴포넌트와 달리 'Behavior' 즉, 어떠한 행위를 정의하는 컴포넌트라는 것을 설명해 주고 있죠.

 

또한, 이 액터 컴포넌트에 Transform 이 붙은 것이 Scene Component 이며, 이 중에서 또 렌더가 가능하고, Collision 시뮬레이팅이 가능한 녀석이 Primitive Component (원시 컴포넌트) 라는 것도 말해 줍니다.

즉, 여기서 알 수 있는 것은 액터 컴포넌트는 트랜스폼이 없고 렌더가 되지 않으며 액터의 행위를 정의하는데 사용하면 된다는 점입니다.

 

https://dev.epicgames.com/documentation/en-us/unreal-engine/components-in-unreal-engine#primitivecomponents

 

Components in Unreal Engine

An overview of Components in Unreal Engine

dev.epicgames.com

더 자세히 알고 싶으시다면, 위 문서를 참고해 보시는 것을 강력히 추천드립니다.

 

 

그 예로, 위와 같이 아무 액터 컴포넌트를 추가해 보면,

(여기서는 Behavior Tree 를 추가했습니다. 자세히 보면 액터 컴포넌트는 씬 컴포넌트와는 또 다른 아이콘이 있고,

씬 컴포넌트 아이콘을 자세히 보면 우측 하단에 액터 컴포넌트의 아이콘 모양이 붙어 있는 것을 알 수 있죠?

즉, 액터 컴포넌트 ⊃ 씬 컴포넌트 라는 것입니다.)

 

그리고 이 Behavior Tree 는 인공지능의 행동 트리 모델을 정의하는데 쓰입니다.

Actor Component 의 정의처럼, 자신 스스로는 어떠한 형태를 갖지 않지만 부착된 액터의 행동을 정의하기 위해 사용된 것이죠.

 

 

Behavior Tree 의 디테일 패널을 봐도, Transform 에 대한 부분은 없습니다.

 

 

때문에

액터에 구성 요소를 추가하고 싶다Scene Component

기능을 추가하고 싶다Actor Component 를 사용하는 것이 어떨까 생각합니다.