게임에 직업 시스템을 넣기 위해 전사(Warrior), 마법사(Magician) 같은 캐릭터 클래스를 상속 구조로 구현하는 과정을 정리했습니다.

캐릭터를 상속받는 C++ 클래스를 만듭니다.
언리얼의 리플렉션 시스템(UCLASS, UPROPERTY)이 들어가야 GenerateHeader가 자동 생성됩니다.

Intermediate 폴더에 자동 생성 파일이 들어가고,
실제 코드는 Source 폴더에 저장됩니다.

공통적으로 쓰일 게임 상수를 모아둘 GameInfo.h를 만들어 include 합니다.

PlatformCharacter.h에 있던 멤버들을 복사해 PlayerCharacter.h에 붙여줍니다.
단, 이 클래스는 "상속용 베이스 캐릭터"이므로 SkeletalMesh는 지정하지 않습니다.
(추상클래스는 아님 — 반드시 인스턴스 생성 가능해야 함)

스프링암, 카메라, 콜리전 정도까지만 유지합니다.

플레이어캐릭터를 베이스로 파생 클래스를 생성합니다.

Warrior, Magician 클래스를 각각 만들어줍니다.

각 클래스의 생성자에서 SkeletalMesh를 세팅합니다.
Warrior:

Magician:

매쉬 로드 및 캡슐 크기 세팅을 각각 다르게 합니다.
예:
GetCapsuleComponent()->InitCapsuleSize(34.f, 88.f); // 마법사 키 맞춤
IMC(Input Mapping Context)를 복제하고,
UPlatformInput을 기반으로 UGameInput 클래스를 새로 만듭니다.

Input.cpp도 동일하게 수정합니다.

PlayerCharacter.cpp의 BeginPlay에 Input Subsystem 등록 코드를 복사해 넣습니다.
#include "EnhancedInputComponent.h"
#include "EnhancedInputSubsystems.h"
#include "../Input/Input.h"
void APlayerCharacter::BeginPlay()
{
Super::BeginPlay();
if (APlayerController* PC = Cast<APlayerController>(GetController()))
{
if (UEnhancedInputLocalPlayerSubsystem* Subsystem =
ULocalPlayer::GetSubsystem<UEnhancedInputLocalPlayerSubsystem>(PC->GetLocalPlayer()))
{
const UGameInput* InputCDO = GetDefault<UGameInput>();
Subsystem->AddMappingContext(InputCDO->mContext, 0);
}
}
}
APlatformCharacter에서 쓰던 입력 함수를 PlayerCharacter에도 붙여 넣습니다.

void APlayerCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
if (UEnhancedInputComponent* Input = Cast<UEnhancedInputComponent>(PlayerInputComponent))
{
Input->BindAction(mMove, ETriggerEvent::Triggered, this, &APlayerCharacter::Input_Move);
Input->BindAction(mRotation, ETriggerEvent::Triggered, this, &APlayerCharacter::Input_Rotation);
}
}
게임모드 베이스를 상속받아 DefaultGameMode 클래스를 만듭니다.

GameInfo를 include 하고 Warrior를 디폴트 캐릭터로 지정합니다.
#include "../GameInfo.h"
#include "Warrior.h"
#include "Magician.h"
ADefaultGameMode::ADefaultGameMode()
{
DefaultPawnClass = AWarrior::StaticClass();
}

프로젝트 세팅 > 맵 & 모드에서 방금 만든 GameMode를 지정하면 실행 시 Warrior가 기본 캐릭터로 스폰됩니다.

enum class EJobType { Warrior, Magician, Archer }; 같은 enum을 두고, PlayerCharacter에 멤버로 두면 직업 판별과 확장이 편해집니다.이 구조를 기본으로 전사/마법사 외에도 궁수(Archer) 등을 쉽게 추가할 수 있습니다.
핵심은 PlayerCharacter를 "공통 베이스"로 두고, 각 직업별 클래스를 파생시켜서 매쉬·스탯·스킬만 다르게 구성하는 것입니다.