언리얼 엔진에서 컴포넌트 기반 시스템은 액터(Actor)의 동작과 표현을 구성하는 핵심 개념이다.

그중에서도 USceneComponent는 가장 기본적이면서도 중요한 역할을 한다.

오늘은 USceneComponent가 어떤 역할을 하고, 이를 기반으로 파생되는 컴포넌트들이 어떻게 기능하는지를 정리한다.


USceneComponent란?

USceneComponent는 위치, 회전, 스케일 정보를 갖는 변환(Transform) 을 제공하는 컴포넌트이다.

이 컴포넌트를 기준으로 여러 다른 컴포넌트를 계층적으로 부착(Attachment) 할 수 있으며, 실제 게임 월드에 시각적인 표현은 하지 않는다.

주요 특징

  • Transform 보유: USceneComponentFTransform 구조체를 통해 위치, 회전, 스케일을 저장한다.
  • 계층적 구조 지원: 다른 SceneComponent 기반 컴포넌트를 자식으로 부착할 수 있다. 즉, 부모-자식 관계가 가능하다.
  • 렌더링 없음: 자체적으로는 화면에 렌더링되지 않는다. 시각적 표현이 필요한 경우는 이를 상속받는 UStaticMeshComponent 등의 파생 클래스를 사용해야 한다.

SceneComponent의 파생 컴포넌트

USceneComponent는 여러 기능성 컴포넌트의 기반이 된다.

UCapsuleComponent

  • 기능: 충돌(Collision)을 처리한다.
  • 용도: 플레이어 캐릭터나 AI 등의 물리적 경계를 감지하기 위해 주로 사용된다.
  • 비주얼: 에디터에서는 보이지만 실제 게임 중에는 보이지 않는다.

UStaticMeshComponent

  • 기능: 메시(모델)를 렌더링할 수 있게 한다.
  • 용도: 정적인 물체, 예: 건물, 벽, 소품 등의 표현에 주로 사용된다.
  • 추가 기능: 머티리얼 적용, 충돌 처리, 섀도잉 등 시각 및 물리 속성도 함께 담당한다.

USceneComponent가 중요한가?

USceneComponent는 게임에서 객체의 공간 상 위치를 제어하고, 계층적 관계를 구성하는 중심 축이다.

예를 들어, 무기를 들고 있는 캐릭터를 생각해보자.

무기는 캐릭터의 손 위치에 맞춰 움직여야 하므로, 무기 컴포넌트는 손에 해당하는 SceneComponent에 부착된다.

이처럼 부착 시스템을 가능케 하는 기본 구조가 바로 USceneComponent다.

예시 코드

// AMyActor.h
UPROPERTY()
USceneComponent* Root;

UPROPERTY()
UStaticMeshComponent* Mesh;

UPROPERTY()
UCapsuleComponent* Collider;
// AMyActor.cpp
Root = CreateDefaultSubobject<USceneComponent>(TEXT("Root"));
RootComponent = Root;

Collider = CreateDefaultSubobject<UCapsuleComponent>(TEXT("Capsule"));
Collider->SetupAttachment(Root);

Mesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Mesh"));
Mesh->SetupAttachment(Root);

이 예시처럼, USceneComponent를 루트로 설정하고, UStaticMeshComponent, UCapsuleComponent를 부착하면, 하나의 트랜스폼 체계를 공유하게 되어 이동, 회전 등의 처리를 일관되게 할 수 있다.

Attachment System

USceneComponent가 제공하는 부착 기능은 트랜스폼 구조를 계층적으로 구성할 수 있게 한다.

ChildComponent->AttachToComponent(ParentComponent, FAttachmentTransformRules::KeepRelativeTransform);

부착 규칙(FAttachmentTransformRules)

부착할 때 어떻게 트랜스폼을 처리할지 결정하는 규칙이다.

  • KeepRelativeTransform
    • 현재 상대 위치를 유지하며 부착한다.
  • SnapToTargetIncludingScale
    • 부모 위치에 정확히 맞추되, 스케일까지 동기화한다.
  • KeepWorldTransform
    • 월드 공간에서의 위치를 유지한 채로 부모에 부착된다.
  • 부모가 움직이면?
    • 자식 컴포넌트는 부모의 트랜스폼을 자동으로 따라간다.
    • 이를 통해 캐릭터의 손에 무기를 붙이거나, 자동차 바퀴가 차체를 따라 움직이는 구조를 쉽게 만들 수 있다.

트랜스폼 관련 함수들

USceneComponent는 트랜스폼을 직접 다루는 다양한 함수를 제공한다.

함수 설명
GetComponentLocation() 월드 위치 반환
SetWorldLocation(FVector) 월드 위치 설정
GetRelativeTransform() 부모에 대한 상대 위치 반환
AddLocalOffset(FVector) 로컬 기준 위치 이동
SetRelativeRotation(FRotator) 부모 기준 회전 설정

물리/애니메이션과의 연결점

UPrimitiveComponent 기반의 컴포넌트(예: UCapsuleComponent, UMeshComponent)는 USceneComponent에서 파생된다.

물리 시뮬레이션과 애니메이션 트랜스폼의 기준점 역할을 한다.

예: 루트 컴포넌트를 SceneComponent로 설정하고, 메시나 캡슐 컴포넌트를 부착하면, 캐릭터 전체의 이동이 루트를 기준으로 제어된다.

Blueprint에서도 핵심

Blueprint에서도 SceneComponent는 다음과 같은 이름으로 자주 사용된다:

  • Scene
    • 보통 루트로 설정하거나 위치 기준으로 쓰는 기본 블록
  • Arrow Component
    • 방향 시각화용으로 사용되며 SceneComponent에서 파생됨
  • Billboard Component
    • 에디터 상에서 시각적으로 위치 확인을 위해 사용됨

마무리

USceneComponent는 시각적으로는 아무것도 보여주지 않지만, 언리얼의 컴포넌트 시스템에서 가장 기초이자 강력한 축이다.

이를 이해하면 다른 컴포넌트들을 구성하고 제어하는 데 큰 도움이 된다.

결국 언리얼에서의 모든 “위치 기반” 동작은 이 컴포넌트를 중심으로 구성된다고 해도 과언이 아니다.

  • 트랜스폼을 중심으로 다양한 컴포넌트를 엮을 수 있고

  • 계층 구조와 월드 간 상호작용의 기준점 역할을 하며

  • 부착 시스템의 핵심으로써 유연한 객체 구조를 만들 수 있다.

USceneComponent는 Blueprint에서도 Scene 노드로 자주 등장하며, 복잡한 계층 구조를 설계할 때 유용하게 쓰인다.

AttachToComponentSetupAttachment와 다르다. 전자는 런타임 부착, 후자는 생성 시 부착이다. 필요에 따라 적절히 선택해야 한다.

댓글남기기