[UE5] Unreal Engine 5 길라잡이 - 2. 언리얼 엔진 콘텐츠의 최소 단위, 액터

세동네·2022년 6월 1일
1
post-thumbnail

이 시리즈는 이득우의 언리얼 C++ 게임 개발의 정석을 바탕으로 작성되었습니다.알립니다.

· 액터

게임은 수많은 오브젝트로 구성된다. 플레이어가 직접 조작하는 캐릭터, 상대하는 몬스터, 배치된 구조물, 벽, 바닥, 획득할 수 있는 아이템 등 모든 요소들이 고유의 특징을 가지고 있다. 이러한 게임에 배치할 수 있는 모든 오브젝트를 언리얼 엔진에선 '액터'라고 하며, 단어 그대로 게임 월드의 특정 공간에서 자신에게 주어진 역할을 수행하는 요소이다.

이러한 액터의 주요 기능은 크게 세 가지로 나눌 수 있다.

  • 시각적 기능 : 플레이어에게 어떻게 보여질 것인가?
  • 물리적 기능 : 액터의 이동과 액터들 간의 상호 동작을 어떻게 할 것인가?
  • 움직임 : 액터가 어떤 움직임을 가질 것인가?

모든 액터가 위 세 가지 기능 전체를 적극적으로 활용하는 것은 아니다. 구조물이나 맵 자체를 구성하는 액터는 움직임이 필요없을 수도 있고, 캐릭터나 다른 움직이는 액터들이 특정 구역에 들어왔을 때 이벤트를 발생시키는 범위를 표현하는 보이지 않는 액터는 시각적 기능이 필요가 없다.

각 액터는 필요한 기능을 붙이고, 필요없는 기능을 제거하여 최적의 형태를 가지게 되는데, 이러한 기능을 '컴포넌트'라고 한다.

· 디테일 패널에서의 액터

언리얼 에디터의 아웃라이너 패널에서 원하는 액터를 클릭하면 해당 액터가 어떤 컴포넌트를 가지고 있는지 디테일 패널에 표시된다.

액터가 어떤 컴포넌트를 가지는지 확인하기 위해 에디터 상단 툴바에서 [ - 액터 배치] 패널을 열어 '액터'를 배치해보았다.

씬에서 주황색으로 표현된 아이콘이 방금 새로 배치한 액터이며, 아웃라이너 패널에 Actor라는 이름의 액터가 존재하는 것을 확인할 수 있다. 현재 빈 액터이기 때문에 시각적 기능에 대한 정보가 없어 그래픽(메시) 없이 아이콘으로만 액터를 확인할 수 있다.

현재 선택 중인 액터는 뷰포트에선 주황색으로 하이라이팅이 되고, 아웃라이너 패널에선 파란색으로 배경이 채워진다. 이렇게 선택된 액터는 디테일 패널에서 아래와 같은 정보를 확인할 수 있다.

기본 빈 액터는 루트 컴포넌트가 DefaultSceneRoot이므로 트랜스폼, 렌더링, 리플리케이션, 콜리전, HLOD, 입력, 액터, 쿠킹이라는 섹션으로 구분된다. 이 내용을 조금 더 상세하게 알아보자.

· 컴포넌트

언리얼 엔진 이전에 유니티 엔진을 다뤄본 경험자라면 위 그림의 트랜스폼, 렌더링 ... 등이 컴포넌트라고 생각할 것이다. 하지만 언리얼 엔진에서 이것은 섹션이라고 칭한다.

언리얼 엔진에서 컴포넌트란

액터에 특수한 기능을 추가할 수 있는 오브젝트

라고 할 수 있다. 즉, 액터를 언리얼 게임 오브젝트의 단위이면서 컴포넌트라는 이름의 특수 유형 오브젝트를 담는 그릇으로 볼 수 있다는 것이다. 컴포넌트를 '특정한 기능 하나'로 정의하지 않고 '오브젝트'라고 하는 것은 서로다른 컴포넌트에서 같은 섹션을 찾을 수 있기 때문이다.

예를 들어 StaticMeshComponent에도 트랜스폼 섹션이 있고, CharacterMesh에도 트랜스폼 섹션이 있다. 심지어 하는 역할도 똑같다.

  • 섹션

    StaticMeshComponent의 여러 섹션

    섹션은 컴포넌트의 세부 기능이라고 보면 된다. 언리얼의 메시 컴포넌트는 렌더링이 되어 그 자체로 형체를 가지고 그것이 게임 월드에서 특정한 역할을 하게 된다. 이때 메시 컴포넌트를 가진 오브젝트는 충돌이나 중력과 같은 물리 법칙이 성립해야 할 것이고, 월드 내의 어떤 위치에, 어느 정도의 회전 각도를 가지고 있는지와 같은 세부적인 내용들이 필요할 것이다.

    이러한 세부적인 기능들을 언리얼 엔진에선 섹션이라는 이름으로 구분하여 컴포넌트에서 조작할 수 있도록 설계되어 있다.

    또한 각 섹션에서 에디터 UI로 수정 가능한 필드를 '프로퍼티'라고 한다.

· 루트 컴포넌트

새로 생성한 Default 액터의 컴포넌트는 DefaultSceneRoot라는 이름을 가지고 있다. 이때 액터 인스턴스 바로 아래에 있는 컴포넌트를 루트 컴포넌트라고 하며, 트랜스폼이 있고 다른 컴포넌트를 어태치할 수 있는 '씬 컴포넌트'만이 루트 컴포넌트가 될 수 있다. 이 말은 즉, 모든 액터는 반드시 트랜스폼을 가진다는 것을 의미한다.

루트 컴포넌트에 다른 컴포넌트를 어태치하면 새로운 컴포넌트는 루트의 자식으로 종속된다. 액터 배치 패널에서 캐릭터 액터를 추가하면 다음과 같은 컴포넌트 구조를 가지는 것을 확인할 수 있다.

CapsuleComponent라는 콜리전을 위한 기본 컴포넌트를 루트 컴포넌트로 두고, 스켈레탈(인간형) 메시와 애니메이션을 효과적으로 적용할 수 있는 CharacterMesh 컴포넌트를 어태치하였다. 두 컴포넌트를 동시에 가지고 있기 때문에 Character 액터는 애니메이션이 적용된 메시와 함께 충돌 처리 등의 물리 효과를 모두 가질 수 있다.

· 논-씬 컴포넌트

앞에서 루트 컴포넌트는 씬 컴포넌트라고 하였다. 반대로 논-씬 컴포넌트는 트랜스폼을 가지지 않는 컴포넌트라고 생각하면 된다. 앞서 살펴본 Character 액터의 CharacterMeshCapsuleComponent는 각각의 트랜스폼이 필요하다.

캐릭터의 메시가 어느 위치에, 어느 각도로, 얼마나 큰 크기를 가지는지 정보가 필요하지만, 캐릭터의 충돌 처리를 담당할 콜라이더가 반드시 캐릭터 메시와 정확히 같은 크기에 같은 위치를 가지고 있을 필요는 없다. 때로는 콜라이더가 조금 더 크거나 작을 수도 있고, 캐릭터 메시의 특정 부위에 닿았을 때만 충돌 처리를 해줄 필요도 있기 때문이다. 따라서 두 컴포넌트는 모두 개별 트랜스폼이 필요하다.

하지만 그렇지 않은 경우가 있다. 위에 삽입한 CharacterMovement 컴포넌트를 보면 걷기, 떨어지기, 헤엄지기 등 다양한 무브먼트 모드를 지원할 뿐, 그 컴포넌트 자체가 형태를 가지지 않는다. 이러한 컴포넌트를 '논-씬 컴포넌트'라 하며, 이는 루트 컴포넌트에 종속되지 않고 따로 취급된다.

0개의 댓글