게임 총괄 관리자 역할
GameModeBase 클래스
좀 더 단순화된 형태. 멀티 플레이 로직 전혀 없음. 간단한 게임에 사용
GameMode 클래스
멀티 플레이 기능 제공. GameState, PlayerState 연동되어 있음
게임모드 설정은 게임 전체 적용된다.
해당 레벨만 다른 게임 모드를 적용하려면
해당 레벨에서 World Settings > GameMode Override에서 다른 모드 선택
Actor
└ Pawn
└ Character
Pawn
루트 컴포넌트만 있고 다른 것들은 다 구현해줘야 한다. 특이한 형태나 이동방식에 적합하다.
Character
메시나 무브먼트 같은 컴포넌트가 기본적으로 세팅되어있다. 인간형 캐릭터가 아니면 적합하지 않다.

Capsule Component: 캐릭터 충돌 체크 범주
Arrow Component: 캐릭터가 어느 방향을 바라보는지 표시
Skeletal Mesh Component: 캐릭터의 3D 모델. 뼈대를 중심으로 움직일 수 있는 메시
Character Movement: 물리적인 이동 로직을 구현해놓은 컴포넌트
C++에서 스프링 암, 카메라 컴포넌트 추가
// 헤더
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "CH3_Character.generated.h"
// 미리 선언
// 여기서 사용하지 않는데 헤더를 포함시키면 볼륨이 쓸데없이 커지니까
// 선언만해서 컴파일러에게 있다고 알려만 주고 헤더는 cpp에서 선언
class USpringArmComponent;
class UCameraComponent;
UCLASS()
class CH3_PROJECT_API ACH3_Character : public ACharacter
{
GENERATED_BODY()
public:
// Sets default values for this character's properties
ACH3_Character();
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Camera")
USpringArmComponent* SpringArmComp;
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Camera")
UCameraComponent* CameraComp;
};
// cpp
#include "CH3_Character.h"
#include "GameFramework/SpringArmComponent.h"
#include "Camera/CameraComponent.h"
// Sets default values
ACH3_Character::ACH3_Character()
{
// Set this character to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = false;
SpringArmComp = CreateDefaultSubobject<USpringArmComponent>(TEXT("SpringArm"));
SpringArmComp->SetupAttachment(RootComponent);
SpringArmComp->TargetArmLength = 300.0f; // 스프링 암 길이 조절
SpringArmComp->bUsePawnControlRotation = true; // 컨트롤러 회전 시 스프링 암도 같이 회전
CameraComp = CreateDefaultSubobject<UCameraComponent>(TEXT("Camera"));
// Spring Arm 끝에 붙인다고 명시
CameraComp->SetupAttachment(SpringArmComp, USpringArmComponent::SocketName);
CameraComp->bUsePawnControlRotation = false; // 카메라는 스프링 암 기준이므로 끄기
}
#include "CH3_GameMode.h"
#include "CH3_Character.h"
ACH3_GameMode::ACH3_GameMode()
{
// StaticClass(): 객체를 생성하지 않고도 클래스를 반환
DefaultPawnClass = ACH3_Character::StaticClass();
}
출처: 스파르타코딩 내일배움캠프