Unreal) USceneComponent
언리얼 엔진에서 컴포넌트 기반 시스템은 액터(Actor)의 동작과 표현을 구성하는 핵심 개념이다.
그중에서도 USceneComponent
는 가장 기본적이면서도 중요한 역할을 한다.
오늘은 USceneComponent
가 어떤 역할을 하고, 이를 기반으로 파생되는 컴포넌트들이 어떻게 기능하는지를 정리한다.
USceneComponent란?
USceneComponent
는 위치, 회전, 스케일 정보를 갖는 변환(Transform) 을 제공하는 컴포넌트이다.
이 컴포넌트를 기준으로 여러 다른 컴포넌트를 계층적으로 부착(Attachment) 할 수 있으며, 실제 게임 월드에 시각적인 표현은 하지 않는다.
주요 특징
- Transform 보유:
USceneComponent
는FTransform
구조체를 통해 위치, 회전, 스케일을 저장한다. - 계층적 구조 지원: 다른 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 노드로 자주 등장하며, 복잡한 계층 구조를 설계할 때 유용하게 쓰인다.
AttachToComponent
는SetupAttachment
와 다르다. 전자는 런타임 부착, 후자는 생성 시 부착이다. 필요에 따라 적절히 선택해야 한다.
댓글남기기