본문 바로가기

UE5 ActorComponent와 SceneComponent

@iamrain2025. 10. 28. 09:43

1. 컴포넌트(Component)

언리얼 엔진에서 컴포넌트는 액터(Actor)에 부착되어 특정 기능과 동작을 구현하는 모듈식 부품입니다. 액터가 뼈대라면, 컴포넌트는 그 뼈대에 붙는 장기, 근육, 감각 기관과 같습니다. 이 시스템 덕분에 개발자는 기능을 재사용 가능한 단위로 캡슐화하여 유연하고 효율적으로 게임 오브젝트를 구성할 수 있습니다.

2. 컴포넌트 계층 구조

언리얼 엔진의 모든 컴포넌트는 UObject에서 파생되며, 명확한 상속 계층을 가집니다. UActorComponentUSceneComponent의 관계는 이 계층 구조의 핵심을 보여줍니다.

UObject
 └─ UActorComponent      // 기능의 기본 단위 (비공간적)
     └─ USceneComponent  // 공간적 위치를 가지는 기능의 기본 단위
         ├─ UPrimitiveComponent
         │   ├─ UMeshComponent
         │   │   └─ UStaticMeshComponent, USkeletalMeshComponent
         │   └─ UShapeComponent (UCapsuleComponent, UBoxComponent)
         └─ UCameraComponent, ULightComponent 등
  • UObject: 언리얼의 모든 객체의 최상위 기본 클래스로, 가비지 컬렉션, 리플렉션 등의 핵심 기능을 제공합니다.
  • UActorComponent: 액터에 부착 가능한 모든 컴포넌트의 기본 클래스입니다.
  • USceneComponent: UActorComponent에 Transform(위치, 회전, 스케일) 개념을 추가한 클래스입니다.

3. UActorComponent: 기능의 추상화

UActorComponent는 기능의 가장 순수한 형태를 정의합니다. 이 컴포넌트는 월드 내 특정 위치와는 무관한, 추상적인 데이터나 로직을 캡슐화하기 위해 설계되었습니다.

  • 핵심 특징: 비공간적(Non-spatial)입니다. 즉, Transform 정보가 없어 월드에 배치되거나 렌더링될 수 없습니다.
  • 주요 용도: 체력 및 스탯 관리, 인벤토리 시스템, AI의 의사결정 로직, 입력 처리 등 눈에 보이지 않는 백그라운드 시스템 구현에 사용됩니다.

3.1. 생명 주기 (Lifecycle)

UActorComponent는 소유자 액터의 생명 주기에 강하게 종속됩니다.

  1. 생성: 액터의 생성자에서 CreateDefaultSubobject<T>()로 생성됩니다.
  2. 등록: RegisterComponent()가 호출되어 컴포넌트를 월드에 등록하고 틱(Tick)과 같은 업데이트 메커니즘을 준비합니다.
  3. 초기화: InitializeComponent()BeginPlay()가 호출되어 게임플레이에 필요한 초기 설정을 수행합니다.
  4. : bCanEverTicktrue이면, 매 프레임 TickComponent()가 호출되어 지속적인 로직을 처리합니다.
  5. 해제 및 소멸: EndPlay(), UninitializeComponent()가 호출된 후, 액터가 소멸될 때 가비지 컬렉터에 의해 함께 소멸됩니다.

3.2. 주요 멤버

  • PrimaryComponentTick: 매 프레임 업데이트(틱) 여부와 방식을 정의합니다. 성능을 위해 기본적으로 비활성화된 경우가 많습니다.
  • Owner: 컴포넌트를 소유한 액터를 가리키는 포인터로, GetOwner()를 통해 접근합니다.

4. USceneComponent: 공간의 개념을 더하다

USceneComponentUActorComponent의 모든 기능을 상속받으면서, 가장 결정적인 요소인 Transform을 추가한 클래스입니다. 이로써 컴포넌트는 월드 내에 고유한 위치, 회전, 스케일 값을 가질 수 있게 됩니다.

  • 핵심 특징: 공간적(Spatial)입니다. Transform을 가지며, 다른 USceneComponent에 부착되어 계층 구조를 형성할 수 있습니다.
  • 주요 용도: 그 자체로 보이지는 않지만, 다른 컴포넌트(메시, 카메라, 광원 등)를 특정 위치에 배치하기 위한 기준점(Anchor) 역할을 하거나, 공간적 계층이 필요한 모든 컴포넌트의 부모 클래스로 사용됩니다.

4.1. 부착(Attachment) 시스템

USceneComponent의 가장 강력한 기능은 컴포넌트 간의 부모-자식 관계 설정입니다.

  • SetupAttachment: 생성자에서 컴포넌트 간의 기본 부착 관계를 설정합니다.
  • AttachToComponent: 런타임에 동적으로 부착 관계를 설정합니다.

자식 컴포넌트는 부모의 Transform에 상대적인 Transform 값을 가지게 됩니다. 따라서 부모가 움직이면 자식도 그 움직임을 따라가게 되어, 캐릭터의 손에 무기를 들려주는 것과 같은 복잡한 오브젝트를 쉽게 구현할 수 있습니다.

4.2. 이동성 (Mobility)

USceneComponentMobility 설정을 통해 엔진이 렌더링과 물리 연산을 최적화할 수 있도록 돕습니다.

  • Static: 절대 움직이지 않음. 최고의 성능 최적화.
  • Stationary: 움직이지 않지만, 색상 변경 등 간접적인 변화는 가능.
  • Movable: 자유롭게 움직일 수 있음. 가장 유연하지만 성능 비용이 가장 높음.

5. 핵심 비교 및 사용 사례

구분 UActorComponent USceneComponent
상속 UObject UActorComponent
핵심 특징 비공간적 (Transform 없음) 공간적 (Transform 있음)
주요 목적 추상적 데이터 및 로직 캡슐화 공간적 위치 지정, 계층 구조 형성
계층 구조 컴포넌트 간 계층 형성 불가 AttachToComponent로 부모-자식 관계 형성
대표 예시 체력/인벤토리 시스템, AI 로직 카메라, 광원, 메시, 충돌체, 파티클 시스템
성능 Transform 연산이 없어 상대적으로 가벼움 Transform 업데이트에 따른 약간의 오버헤드 존재

언제 무엇을 사용해야 하는가?

  • UActorComponent를 선택하세요:
    • 구현하려는 기능이 월드 내 특정 위치와 전혀 상관없을 때.
    • 캐릭터의 스탯, 인벤토리 데이터, 게임의 규칙 관리 등 순수한 데이터나 보이지 않는 로직을 다룰 때.
  • USceneComponent를 선택하세요:
    • 무언가를 월드의 특정 위치에 배치해야 할 때.
    • 다른 컴포넌트를 붙일 '기준점'이 필요할 때. (예: 총구 위치, 머리 위 UI 위치)
    • 화면에 보이거나(메시, 파티클), 물리적 충돌(충돌체)이 필요한 모든 컴포넌트의 기반으로 사용할 때.

6. 요약

UActorComponentUSceneComponent는 둘 다 액터에 기능을 추가하는 부품이지만, 가장 결정적인 차이는 'Transform', 즉 공간 정보의 유무에 있습니다.

 

 UActorComponent는 Transform이 없는 순수한 '기능' 또는 '데이터' 덩어리입니다. 예를 들어 캐릭터의 체력 시스템, 인벤토리처럼 눈에 보이지 않는 논리적인 부분을 만들 때 사용합니다. 위치가 없으므로 재사용성이 높고 가볍다는 장점이 있습니다.

반면 USceneComponent는 이러한 UActorComponent를 상속받아 Transform을 추가한 것입니다. 이로써 월드 내에 특정 위치, 회전, 크기를 가질 수 있게 됩니다. 그 자체로 보이진 않지만, 메시나 파티클 같은 시각적 컴포넌트들을 원하는 위치에 배치하는 '기준점' 역할을 하며, 다른 USceneComponent에 부착되어 부모-자식 관계를 형성할 수 있습니다.

 

 결론적으로, 위치와 상관없는 기능은 UActorComponent로, 월드 내 특정 위치에 존재해야 하거나 무언가를 붙여야 하는 기능은 USceneComponent 또는 그 자식 클래스로 구현합니다.

'Unreal' 카테고리의 다른 글

UE5 TSet  (0) 2025.10.30
std::map과 TMap  (0) 2025.10.29
Gameplay Framework  (0) 2025.10.27
Remote Procedure Call  (0) 2025.10.27
NetRole  (0) 2025.10.27
iamrain
@iamrain :: Annals of Unreal

iamrain 님의 블로그 입니다.

공감하셨다면 ❤️ 구독도 환영합니다! 🤗

목차