언리얼5엔진과 CPP언어를 사용하여 프로젝트를 진행하며 자주 사용하였던 컴포넌트들에대한 정리 입니다.
자주 사용되는 컴포넌트
1 UActorComponent
필요한 헤더: #include "Components/ActorComponent.h"
설명: 모든 컴포넌트의 기본 클래스입니다. 다른 모든 컴포넌트는 이 클래스를 상속받아 확장됩니다.
2 USceneComponent
필요한 헤더: #include "Components/SceneComponent.h"
설명: 트랜스폼 정보(위치, 회전, 스케일)를 가지는 모든 컴포넌트의 기본 클래스입니다.
3 UPrimitiveComponent
필요한 헤더: #include "Components/PrimitiveComponent.h"
설명: 렌더링 및 물리 시뮬레이션이 가능한 모든 컴포넌트의 기본 클래스입니다.
4 UStaticMeshComponent
필요한 헤더: #include "Components/StaticMeshComponent.h"
설명: 정적 메시를 렌더링하는 컴포넌트입니다.
5 USkeletalMeshComponent
필요한 헤더: #include "Components/SkeletalMeshComponent.h"
설명: 골격 메시를 렌더링하고 애니메이션을 적용할 수 있는 컴포넌트입니다.
6 UCameraComponent
필요한 헤더: #include "Camera/CameraComponent.h"
설명: 카메라 뷰를 제공하는 컴포넌트입니다.
7 USpringArmComponent
필요한 헤더: #include "GameFramework/SpringArmComponent.h"
설명: 카메라 또는 다른 컴포넌트를 스무스하게 따라다니게 하는 스프링 암입니다.
8 UAudioComponent
필요한 헤더: #include "Components/AudioComponent.h"
설명: 오디오를 재생하는 컴포넌트입니다.
9 UBoxComponent
필요한 헤더: #include "Components/BoxComponent.h"
설명: 박스 형태의 콜리전 컴포넌트입니다.
10 USphereComponent
필요한 헤더: #include "Components/SphereComponent.h"
설명: 구 형태의 콜리전 컴포넌트입니다.
11 UCapsuleComponent
필요한 헤더: #include "Components/CapsuleComponent.h"
설명: 캡슐 형태의 콜리전 컴포넌트입니다.
12 UParticleSystemComponent
필요한 헤더: #include "Particles/ParticleSystemComponent.h"
설명: 파티클 시스템을 렌더링하는 컴포넌트입니다.
13 UNiagaraComponent
필요한 헤더: #include "NiagaraComponent.h"
설명: 나이아가라 파티클 시스템을 렌더링하는 컴포넌트입니다. (언리얼5 이상)
14 UWidgetComponent
필요한 헤더: #include "Components/WidgetComponent.h"
설명: 3D 공간에서 UI 위젯을 렌더링하는 컴포넌트입니다.
컴포넌트의 선언 및 생성 예제
예제 클래스의 헤더(.h)에서 선언
모든 컴포넌트는 언리얼 엔진의 리플렉션 시스템과 연동되어야 하므로 매크로(UPROPERTY())선언이 필수입니다.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyActor.generated.h"
UCLASS()
class MYPROJECT_API AMyActor : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
AMyActor();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
private:
// 컴포넌트를 선언합니다.
UPROPERTY(VisibleAnywhere, Category = "Components")
UStaticMeshComponent* StaticMeshComponent;
UPROPERTY(VisibleAnywhere, Category = "Components")
USkeletalMeshComponent* SkeletalMeshComponent;
UPROPERTY(VisibleAnywhere, Category = "Components")
UCameraComponent* CameraComponent;
UPROPERTY(VisibleAnywhere, Category = "Components")
USpringArmComponent* SpringArmComponent;
UPROPERTY(VisibleAnywhere, Category = "Components")
UAudioComponent* AudioComponent;
UPROPERTY(VisibleAnywhere, Category = "Components")
UBoxComponent* BoxComponent;
UPROPERTY(VisibleAnywhere, Category = "Components")
USphereComponent* SphereComponent;
UPROPERTY(VisibleAnywhere, Category = "Components")
UCapsuleComponent* CapsuleComponent;
UPROPERTY(VisibleAnywhere, Category = "Components")
UParticleSystemComponent* ParticleSystemComponent;
UPROPERTY(VisibleAnywhere, Category = "Components")
UNiagaraComponent* NiagaraComponent;
UPROPERTY(VisibleAnywhere, Category = "Components")
UWidgetComponent* WidgetComponent;
};
예제 클래스의 소스(.cpp)에서 생성
컴포넌트들은 CreateDefaultSubobject<>()로 생성되며 각각의 컴포넌트 정보를 포함한 헤더를 선언해야 합니다.
또한 컴포넌트 생성시 매개변수는 FName 이므로 TEXT("Name")매크로를 사용하여 지정합니다.
#include "MyActor.h"
// 필요한 헤더들을 선언해야 합니다.
#include "Components/StaticMeshComponent.h"
#include "Camera/CameraComponent.h"
#include "GameFramework/SpringArmComponent.h"
#include "Components/AudioComponent.h"
#include "Components/BoxComponent.h"
#include "Components/SphereComponent.h"
#include "Components/CapsuleComponent.h"
#include "Particles/ParticleSystemComponent.h"
#include "NiagaraComponent.h"
#include "Components/WidgetComponent.h"
AMyActor::AMyActor()
{
PrimaryActorTick.bCanEverTick = true;
StaticMeshComponent = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("StaticMeshComponent"));
RootComponent = StaticMeshComponent;
SpringArmComponent = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArmComponent"));
SpringArmComponent->SetupAttachment(RootComponent);
CameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("CameraComponent"));
CameraComponent->SetupAttachment(SpringArmComponent);
AudioComponent = CreateDefaultSubobject<UAudioComponent>(TEXT("AudioComponent"));
AudioComponent->SetupAttachment(RootComponent);
BoxComponent = CreateDefaultSubobject<UBoxComponent>(TEXT("BoxComponent"));
BoxComponent->SetupAttachment(RootComponent);
SphereComponent = CreateDefaultSubobject<USphereComponent>(TEXT("SphereComponent"));
SphereComponent->SetupAttachment(RootComponent);
CapsuleComponent = CreateDefaultSubobject<UCapsuleComponent>(TEXT("CapsuleComponent"));
CapsuleComponent->SetupAttachment(RootComponent);
ParticleSystemComponent = CreateDefaultSubobject<UParticleSystemComponent>(TEXT("ParticleSystemComponent"));
ParticleSystemComponent->SetupAttachment(RootComponent);
NiagaraComponent = CreateDefaultSubobject<UNiagaraComponent>(TEXT("NiagaraComponent"));
NiagaraComponent->SetupAttachment(RootComponent);
WidgetComponent = CreateDefaultSubobject<UWidgetComponent>(TEXT("WidgetComponent"));
WidgetComponent->SetupAttachment(RootComponent);
}
void AMyActor::BeginPlay()
{
Super::BeginPlay();
}
void AMyActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
CreateDefaultSubobject에 대한 주요 사항
기본 개념
CreateDefaultSubobject는 템플릿 함수로, 특정 타입의 서브오브젝트를 생성합니다.
생성된 서브오브젝트는 소유자 객체의 구성 요소로 자동으로 등록됩니다.
구문
UYourComponentType* YourComponent = CreateDefaultSubobject<UYourComponentType>(TEXT("YourComponentName"));
참고사항
CreateDefaultSubobject는 생성자 내에서만 호출되어야 합니다.
이 함수는 생성된 오브젝트의 메모리 관리 및 초기화 작업을 자동으로 처리합니다.
생성된 컴포넌트는 일반적으로 UPROPERTY 매크로와 함께 선언하여 가비지 컬렉션 및 에디터 내 표시를 관리합니다.
사용 시 주의점
컴포넌트의 이름은 고유해야 하며, 텍스트 형식으로 제공됩니다.
동일한 이름을 가진 여러 컴포넌트를 생성하지 않도록 주의해야 합니다.
컴포넌트의 초기화 및 셋업은 생성자 내에서 일관되게 수행되어야 합니다.
'공부 > Unreal Engine 5' 카테고리의 다른 글
[언리얼5] 리플렉션 시스템에 사용되는 매크로 정리 (1) | 2024.06.06 |
---|---|
[언리얼5] 언리얼 CPP 연산자 오버로딩 (0) | 2024.06.05 |
[언리얼5] 식물 물리적용 참고자료 (4) | 2024.06.04 |
[언리얼5] .generated.h 에 대하여 (1) | 2024.06.04 |
[언리얼5] 언리얼 CPP 인벤토리시스템 참고 자료 (0) | 2024.06.03 |
댓글