본문 바로가기
Unreal/Manual

Unreal C++ SpawnActor 무기 장착하기

by Dev_카페인 2023. 12. 17.
반응형

[Unreal/C++] SpawnActor 무기 장착하기

 

언리얼 엔진 C++ 코드를 이용하여

오른손에 무기를 장착한다.

 

스켈레톤에서 소켓 추가

소켓에서 프리뷰 에셋을 추가하여 미리보기

프리뷰 에셋을 추가하여 원하는 위치와 회전을 맞춰줍니다.

 

Actor로 생성해야 하니 Actor를 상속받는 무기 클래스를 만들어 줍니다.

Sword 클래스 코드는 다음과 같습니다.

 

// Sowrd.h
#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "Enemy_Sword.generated.h"


UCLASS()
class MAINPROJECT_API AEnemy_Sword : public AActor
{
	GENERATED_BODY()
	
public:	
	AEnemy_Sword();

protected:
	virtual void BeginPlay() override;

private :
	UPROPERTY(VisibleDefaultsOnly)
		USkeletalMeshComponent* SkeletalMesh;
	UPROPERTY(VisibleDefaultsOnly)
		class UBoxComponent* BoxCollision;
};

 

// Sword.cpp
#include "Enemy/Weapons/Enemy_Sword.h"

#include "Components/BoxComponent.h"

AEnemy_Sword::AEnemy_Sword()
{
	RootComponent = CreateDefaultSubobject<USceneComponent>(TEXT("Scene"));
	SkeletalMesh = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("SkeletalMeshComponent"));
	BoxCollision = CreateDefaultSubobject<UBoxComponent>(TEXT("BoxComponent"));
	
	SkeletalMesh->SetupAttachment(RootComponent);
	BoxCollision->SetupAttachment(RootComponent);
	
	ConstructorHelpers::FObjectFinder<USkeletalMesh> mesh(L"SkeletalMesh'/Game///CityofBrass_Enemies/Meshes/Enemy/Sword/enemy_Sword_Mesh.enemy_Sword_Mesh'");
	SkeletalMesh->SetSkeletalMesh(mesh.Object);

	BoxCollision->SetBoxExtent(FVector(35.0f, 10.0f, 3.0f));
	BoxCollision->SetRelativeLocation(FVector(50.0f, -5.0f, 0.0f));
	
}

void AEnemy_Sword::BeginPlay()
{
	Super::BeginPlay();
}

 

 

캐릭터 스켈레톤 소켓에 무기를 장착시켜줍니다.

생성한 무기 클래스의 헤더파일을 포함시켜줘야 합니다.

// MyCharacter.cpp
void ACorpse::BeginPlay()
{
	Super::BeginPlay();

	YouClass* sword = GetWorld()->SpawnActor<YouClass>(FVector::ZeroVector, FRotator::ZeroRotator);
	if (sword)
	{
		const USkeletalMeshSocket* socket = GetMesh()->GetSocketByName("SocketName");
		socket->AttachActor(sword, GetMesh());
	}
}

 

반응형