Component는 기능, 부품을 의미하며,
Actor 라는 껍데기에 여러 종류의 Component 라는 기능, 부품을 추가해야 기능이 작동함(외형, 움직임 등)
모든 Actor는 Root Component를 필수로 가져야 하며,
액터의 위치(Location), 회전(Rotation), 크기(Scale)를 정의하는 최상위 컴포넌트이며 없으면 직접 만들어줘야 함
모든 하위 컴포넌트는 루트 컴포넌트를 기준으로 트랜스폼이 계산됨
대부분의 경우 Scene Component를 루트 컴포넌트로 설정하여 액터의 트랜스폼을 관리하며,
그 아래에 다양한 컴포넌트를 계층적으로 추가함
3D 모델 표현, 충돌 처리, 물리 적용 등 실제로 화면에 구현되는 컴포넌트이며 건물, 아이템, 바위, 단순 기믹 오브젝트 등 움직임이 단순하거나 없는 오브젝트로 주로 사용하며, 애니메이션이나 스켈레탈 본 없이 (즉, 움직임이 없고 단순 이동·회전만 하는) 정적 (Static) 3D 모델을 그리는 컴포넌트임
Actor
└── Root Component (기준/Scene Component)
├── StaticMeshComponent (보이는 것)
├── CollisionComponent (충돌)
└── AudioComponent (소리)
액터 클래스의 .h 파일의 protected에 포인터 멤버 변수() 추가
cpp 파일의 생성자에서 Scene Component 생성 후 루트 컴포너트로 설정,
Static Mesh Component 생성 후 Scene Component에 연결
CreateDefaultSubobject<T>(TEXT("컴포넌트 이름"));
- 컴포넌트를 생성하는 함수
- <T> 생성할 컴포넌트 타입이며 앞에 무조건 U를 붙여야함
ex) <USceneComponent>, <UStaticMeshComponent>, <UAudioComponent>
- (TEXT("")) : 컴포넌트 이름
SetRootComponent(SceneRoot);
- 해당 컴포넌트(SceneRoot)를 루트 컴포넌트로 설정
SetupAttachment(SceneRoot);
- 부모에 연결, 루트 컴포넌트의 하위 컴포넌트로 루트 컴포넌트 트랜스폼에 따라 움직임
ex) StaticMeshComp->SetupAttachment(SceneRoot); // StaticMeshComp 컴포넌트를 SceneRoot(부모)에 연결
// Item.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Item.generated.h"
UCLASS()
class SPARTAPROJECT_API AItem : public AActor
{
GENERATED_BODY()
public:
AItem();
protected:
// 멤버 변수 생성 후 SceneRoot를 포인터, 추후 Scene Component를 루트 컴포넌트로 사용
USceneComponent* SceneRoot;
// 멤버 변수 생성 후 StaticMeshComponent를 포인터, 추후 Static Mesh Component로 사용
UStaticMeshComponent* StaticMeshComp;
};
// Item.cpp
#include "Item.h"
AItem::AItem()
{
// Scene Component를 생성
SceneRoot = CreateDefaultSubobject<USceneComponent>(TEXT("SceneRoot"));
// Scene Component를 SetRootComponent 루트로 설정
SetRootComponent(SceneRoot);
// Static Mesh Component 생성
StaticMeshComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMesh"));
// Static Mesh Component를 Scene Component에 연결
StaticMeshComp->SetupAttachment(SceneRoot);
}
Static Mesh
- 3D 모델(정적 메시 데이터)를 정의
- .uasset 파일로 관리됨
- 실제 오브젝트의 형태를 담당함
Material
- 메시의 시각적 속성을 정의
- 색상, 질감, 반사율, 투명도 등을 설정할 수 있음
- 메시의 표면 표현을 담당
사용할 스태틱 메시와 머티리얼 에셋 우클릭 > Copy Reference 클릭 > Visual Studio에 붙여넣기
해당 경로 /Game ~ 에셋 이름 빼고 나머지 지우기
.cpp 파일에서 코드 작성
static ConstructorHelpers::FObjectFinder<T> 적용할 에셋 변수명(TEXT("경로"));
- 에셋(Static Mesh, Material 등)을 경로로 찾아오는 함수
- <T> : 가져올 에셋 타입 앞에 반드시 U를 붙여야함 (UStaticMesh, UMaterial 등)
- TEXT("") : 에셋 경로 (.uasset 기준)
ex) TEXT("/Game/Resources/Props/SM_Chair.SM_Chair");
- FObjectFinder 함수는 생성자에서만 사용하며, static을 사용해 한 번만 로드하는 것이 좋음
변수명.Succeeded();
- 에셋의 경로를 제대로 찾아왔는지 확인하는 함수 (true, false)
- 성공시 if문 내부 코드 실행
대상 컴포넌트->Set***(0, 적용할 에셋 변수명.Object);
- 대상 컴포넌트 == 위에서 생성한 컴포넌트 이름
- Set*** : 컴포넌트에 에셋을 적용하는 멤버 함수
ex) SetStaticMesh, SetMaterial 등
- 0 == 인덱스(슬롯 번호) / 머티리얼만 사용
ex) StaticMeshComp->SetStaticMesh(MeshAsset.Object); // 스태틱메시 형태 적용
ex) StaticMeshComp->SetMaterial(0, MaterialAsset.Object); // 머티리얼 표현 적용
#include "Item.h"
AItem::AItem()
{
// Scene Component를 생성하고 루트로 설정
SceneRoot = CreateDefaultSubobject<USceneComponent>(TEXT("SceneRoot"));
SetRootComponent(SceneRoot);
// Static Mesh Component를 생성하고 Scene Component에 Attach
StaticMeshComp = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMesh"));
StaticMeshComp->SetupAttachment(SceneRoot);
// Static Mesh를 코드에서 설정
static ConstructorHelpers::FObjectFinder<UStaticMesh> MeshAsset(TEXT("/Game/Resources/Props/SM_Chair.SM_Chair"));
if (MeshAsset.Succeeded())
{
StaticMeshComp->SetStaticMesh(MeshAsset.Object);
}
// Material을 코드에서 설정
static ConstructorHelpers::FObjectFinder<UMaterial> MaterialAsset(TEXT("/Game/Resources/Materials/M_Metal_Gold.M_Metal_Gold"));
if (MaterialAsset.Succeeded())
{
StaticMeshComp->SetMaterial(0, MaterialAsset.Object);
}
}| 리플렉션을 활용한 회전발판과 움직이는 장애물 만들기 (1) | 2026.04.08 |
|---|---|
| Unreal C++ 기초 4. 로그, 리플렉션, 함수, 리플렉션 (0) | 2026.04.07 |
| Unreal C++ 기초 2. Migrate, 클래스 생성 및 삭제 (0) | 2026.04.06 |
| Unreal C++ 기초 1. 설치 및 실행 (0) | 2026.04.05 |
| 언리얼 C++로 Actor의 좌표 이동 및 회전 프로그램 구현 (0) | 2026.03.25 |