언리얼 엔진5

[UE5] C++ 클래스에서 컴포넌트 구성하기

ws3319 2025. 3. 27. 22:40

C++ 클래스에서 컴포넌트를 구성하는 법을 알아봅시다.

Pawn의 베이스가 되는 BasePawn.cpp를 생성해봤습니다.

 

<BasePawn.h>
private:
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components", meta = (AllowPrivateAccess = "true"))
	class UCapsuleComponent* CapsuleComp;

Capsule Component를 만들기 위해 다음과 같이 작성하였습니다. UCapsuleComponent type과 같이 헤더파일에 포함되어 있지 않은 클래스 객체를 선언하기 위해서는 부가적인 헤더파일이 필요합니다. 하지만 cpp 파일이 아닌 헤더파일에 또 다른 헤더파일을 추가하게 되면 불필요한 데이터를 너무 많이 가져오게 됩니다. 이를 막기 위해 전방 선언Forward Declaration 기법을 사용하는 것이 좋습니다.

그 방법은 헤더파일을 추가하지 않고 앞에 "class"를 붙여 작성해주는 것입니다. 이렇게 하면 헤더파일을 추가하지 않고도 해당 객체를 선언할 수 있습니다.

 

UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components", meta = (AllowPrivateAccess = "true"))
UStaticMeshComponent* BaseMesh;

UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components", meta = (AllowPrivateAccess = "true"))
UStaticMeshComponent* TurretMesh;

UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Components", meta = (AllowPrivateAccess = "true"))
USceneComponent* ProjectileSpawnPoint;

또, 다음과 같이 Pawn에 필요한 Static Mesh Component와 Scene Component도 추가해주었습니다.

 

<BasePawn.cpp>
ABasePawn::ABasePawn()
{
	CapsuleComp = CreateDefaultSubobject<UCapsuleComponent>(TEXT("Capsule Collider"));
	RootComponent = CapsuleComp;

	BaseMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Base Mesh"));
	BaseMesh->SetupAttachment(CapsuleComp);

	TurretMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Turret Mesh"));
	TurretMesh->SetupAttachment(BaseMesh);

	ProjectileSpawnPoint = CreateDefaultSubobject<USceneComponent>(TEXT("Spawn Point"));
	ProjectileSpawnPoint->SetupAttachment(TurretMesh);

}

그리고 C++ 클래스의 생성자에서 다음과 같이 작성해줍니다.
컴포넌트를 생성하기 위해서는 CreateDefaultSubobject가 사용됩니다.
<>에는 컴포넌트의 타입, ()에는 블루프린트 창의 컴포넌트 목록에 표시할 컴포넌트의 이름을 작성합니다.
그리고 RootComponent = CapsuleComp와 같이 컴포넌트의 Root를 설정합니다.
다른 컴포넌트들도 마찬가지로 생성하고,
부모 컴포넌트를 BaseMesh->SetupAttachment(CapsuleComp)와 같이 설정해줍니다. 이렇게 하면 BaseMesh는 CapsuleComp의 하위 컴포넌트가 됩니다.

결과물입니다.

해당 클래스를 기반으로 블루프린트를 생성하면 다음과 같이 컴포넌트들이 생성된 것을 볼 수 있습니다.

 

C++ 클래스에서 컴포넌트를 구성하는 법을 알아보았습니다.

'언리얼 엔진5' 카테고리의 다른 글

[UE5] 무기 장착하기  (0) 2025.03.27
[UE5] 타이머 설정하기  (0) 2025.03.27
[UE5] 플레이어 감지  (0) 2025.03.27