[UE5 C++] 플레이어 캐릭터 생성 - 1

LeeTaes·2024년 4월 23일
0

[UE_Project] MysticMaze

목록 보기
2/17
post-thumbnail

언리얼 엔진을 사용한 RPG 프로젝트 만들기

  • 간단한 플레이어 캐릭터를 C++로 생성하기
    - SkeletalMesh, SpringArm, Camera 추가하기
    - GameMode에서 DefaultPawnClass 설정하기

플레이어 캐릭터 클래스 생성하기

  • 상속 구조는 다음과 같습니다.!
  • 저는 이번 프로젝트에서 플레이어를 맡아 제작하기로 하였으므로, 플레이어의 기본 캐릭터 클래스를 제작해보도록 하겠습니다.

MMPlayerCharacter Class

  • 간단히 SkeletalMesh와 SpringArm, Camera만 추가하여 확인해보도록 하겠습니다.
// MMPlayerCharacter Header

public:
	AMMPlayerCharacter();

protected:
	// 셀카봉 역할을 해줄 컴포넌트
	UPROPERTY(VisibleAnywhere, Category = Camera, Meta = (AllowPrivateAccess = "true"))
	TObjectPtr<class USpringArmComponent> SpringArm;

	// 실제 촬영을 위한 컴포넌트
	UPROPERTY(VisibleAnywhere, Category = Camera, Meta = (AllowPrivateAccess = "true"))
	TObjectPtr<class UCameraComponent> Camera;

생성자 함수에서 에디터로부터 애셋을 불러오고, 컴포넌트들을 연결해 줍니다.

// MMPlayerCharacter Cpp

#include "Character/MMPlayerCharacter.h"

#include "Components/CapsuleComponent.h"
#include "Camera/CameraComponent.h"
#include "GameFramework/SpringArmComponent.h"

AMMPlayerCharacter::AMMPlayerCharacter()
{
	// Collision 설정
	{
		GetCapsuleComponent()->InitCapsuleSize(35.0f, 90.0f);
	}

	// Mesh 설정
	{
		// Load
		static ConstructorHelpers::FObjectFinder<USkeletalMesh> SkeletalMeshRef(TEXT("/Script/Engine.SkeletalMesh'/Game/Pirate/Mesh_UE5/Full/SKM_Pirate_Full_03.SKM_Pirate_Full_03'"));
		if (SkeletalMeshRef.Object)
		{
			// Mesh 설정
			GetMesh()->SetSkeletalMesh(SkeletalMeshRef.Object);
			GetMesh()->SetRelativeLocationAndRotation(FVector(0.0f, 0.0f, -90.0f), FRotator(0.0f, -90.0f, 0.0f));
		}
	}

	// Camera 설정
	{
		SpringArm = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArm"));
		SpringArm->SetupAttachment(RootComponent);

		Camera = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera"));
		Camera->SetupAttachment(SpringArm, USpringArmComponent::SocketName);
	}
}

게임모드 클래스에서 DefaultPawn 설정하기

  • 기본적인 캐릭터 제작이 완료되었으므로 해당 클래스를 부모로 하는 블루프린트 클래스를 생성합니다.

  • 실제 레벨에서 사용할 게임모드 클래스를 생성합니다.

MMGameMode Class

  • 마을 레벨의 게임 로직을 관리하기 위한 클래스입니다.
  • DefaultPawnClass를 위에서 생성한 블루프린트로 지정해주도록 합니다.
// MMGameMode Cpp
#include "Game/MMGameMode.h"

AMMGameMode::AMMGameMode()
{
	// DefaultPawn 설정
	static ConstructorHelpers::FClassFinder<APawn> PawnClassRef(TEXT("/Script/Engine.Blueprint'/Game/MysticMaze/Player/BP_Player.BP_Player_C'"));
	if (PawnClassRef.Succeeded())
	{
		DefaultPawnClass = PawnClassRef.Class;
	}
	
}
  • 전체 경로 뒤에 "_C"가 붙은 것을 확인할 수 있습니다.
  • "_C"는 해당 블루프린트 클래스의 인스턴스를 구별하기 위한 언리얼의 네이밍 컨벤션 중 하나입니다.
  • 즉, "_C"는 해당 블루프린트 클래스의 인스턴스를 가리킵니다.
    블루프린트 클래스를 경로로 찾아올 때는 "_C"를 붙여줘야 합니다.

위 클래스를 상속받는 블루프린트 클래스를 생성하고, 레벨에 적용시켜주도록 합니다.

결과

지정한 SkeletalMesh, SpringArm, Camera가 제대로 동작하는 것을 확인할 수 있습니다.

profile
클라이언트 프로그래머 지망생

0개의 댓글