1️⃣ GameMode의 역할
GameMode는 게임 전반의 규칙과 흐름을 제어하는 컨트롤 타워입니다.
싱글 플레이에서는 로컬에서만 동작하며, 다음과 같은 주요 기능을 수행합니다.
플레이어 Pawn/Character 스폰: 게임 시작 시 플레이어가 조작할 Pawn이나 Character를 자동으로 스폰합니다.
PlayerController 관리: 플레이어의 입력(키보드, 마우스, 게임패드 등)을 처리하는 PlayerController를 지정합니다.
게임 규칙 관리: 점수 계산, 타이머 관리, 승리 및 패배 조건 등을 정의합니다.
GameState 및 PlayerState 활용: 게임 전역 상태(GameState)와 플레이어별 상태(PlayerState)를 추적합니다.
2️⃣ GameMode와 GameModeBase 비교
GameMode는 멀티플레이에 필요한 일부 기능(세션, 플레이어 연결)을 기본적으로 포함합니다.
GameModeBase는 단순화된 형태로, 멀티플레이 관련 로직이 거의 포함되지 않습니다.
GameModeBase는 싱글 플레이나 간단한 멀티플레이 게임에서 주로 사용됩니다.
1️⃣ C++ GameMode 클래스 생성
GameMode를 부모 클래스로 하는 C++ 클래스를 생성합니다.
GameMode는 직접 코드로 설정할 수 있지만, 일반적으로 블루프린트 클래스를 한 번 더 감싸서 에디터에서 쉽게 조정할 수 있도록 만듭니다.
2️⃣ GameMode 적용 방식
GameMode는 프로젝트 전역 설정이나 레벨별 설정에서 적용할 수 있습니다.
프로젝트 전역 설정:

Edit → Project Settings → Maps & Modes에서 Default GameMode를 설정하면 프로젝트 전체에 적용됩니다.
레벨별 설정:

Window → World Settings에서 GameMode Override를 설정하면 해당 레벨에만 특정 GameMode를 적용할 수 있습니다.
프로젝트 전역 설정보다 레벨별 설정이 우선 적용됩니다.
3️⃣ GameMode 기본 구성 확인
GameMode에는 다음과 같은 기본 클래스들이 포함됩니다.

DefaultPawnClass: 플레이어가 조작할 기본 Pawn 또는 Character.
HUDClass: 게임 화면에 표시될 UI 요소.
PlayerControllerClass: 플레이어 입력 처리와 카메라 제어.
GameStateClass / PlayerStateClass: 게임 상태 및 플레이어별 상태 관리.
SpectatorClass: 관전자 모드에서 사용할 Pawn.
1️⃣ Pawn 클래스
Pawn은 언리얼 엔진에서 플레이어나 AI가 조작할 수 있는 가장 기본적인 클래스입니다.
충돌 처리, 중력, 이동 등의 로직이 포함되어 있지 않아, 사용자가 처음부터 직접 구현해야 합니다.
주로 비행기, 드론, 카메라 등 특수한 이동 방식이 필요한 객체를 구현할 때 사용합니다.
2️⃣ Character 클래스
Character는 Pawn을 상속받은 클래스이며, 보행형 캐릭터를 구현하기 위해 만들어진 확장형 클래스입니다.
기본적으로 다음과 같은 기능을 포함합니다.
CharacterMovementComponent: 이동, 점프, 중력, 네트워크 동기화.
CapsuleComponent: 충돌 처리 및 물리적 크기 설정.
SkeletalMeshComponent: 캐릭터의 외형과 애니메이션 적용.
사람처럼 걷거나 뛰는 동작을 구현할 때 최적화되어 있으며, 기본 함수들 (MoveForward, Jump 등)이 내장되어 있어 간단히 구현할 수 있습니다.
자동차나 비행기처럼 완전히 다른 이동 방식이 필요한 경우에는 Character 대신 Pawn을 사용하는 것이 더 적합합니다.
1️⃣ Character 클래스 생성
Character를 부모 클래스로 하는 C++ 클래스를 생성합니다.
생성된 C++ 클래스는 기본적인 골격만 포함되며, 여기에 추가적인 컴포넌트나 로직을 작성해 확장할 수 있습니다.
2️⃣ 스켈레탈 메시(Skeletal Mesh) 설정
Skeletal Mesh는 뼈대(Skeleton)를 포함한 3D 모델로, 캐릭터의 외형과 애니메이션 동작을 제어합니다.
C++ Character 클래스에 Skeletal Mesh Component가 포함되어 있으며, 블루프린트에서 이 컴포넌트에 원하는 메시를 설정할 수 있습니다.
기본적으로 제공되는 SKM_Manny나 SKM_Quinn 등의 메시를 사용해 캐릭터 외형을 설정합니다.
3️⃣ 메시 위치 및 방향 조정
언리얼 엔진에서 캐릭터의 기본 전방 방향은 X축입니다.
메시 모델의 방향이 맞지 않으면, Yaw 회전 값을 조정해 캐릭터가 전방을 바라보도록 수정합니다.
캡슐 컴포넌트와 메시의 위치를 조정하여 충돌 범위를 정확히 설정합니다.
1️⃣ 카메라 및 스프링 암 설정
3인칭 시점을 구현하기 위해 SpringArmComponent와 CameraComponent를 추가합니다.
스프링 암(SpringArm)은 카메라와 캐릭터 간의 거리를 유지하며, 카메라가 벽에 박히지 않도록 조정합니다.
카메라는 스프링 암의 끝에 부착되어 캐릭터를 따라가도록 설정됩니다.
2️⃣ GameMode에서 DefaultPawnClass 설정
GameMode의 DefaultPawnClass를 우리가 만든 Character로 설정합니다.
이 설정을 통해 게임이 시작될 때 해당 Character가 자동으로 스폰됩니다.
블루프린트로 만든 BP_Character를 사용하면 에디터에서 DefaultPawnClass를 더욱 쉽게 관리할 수 있습니다.
1️⃣ GameMode의 중요성
GameMode는 게임 전반의 흐름과 규칙을 관리하며, 게임의 핵심 시스템을 설계하는 출발점이 됩니다.
특히 DefaultPawnClass 설정을 통해 플레이어가 조작할 캐릭터를 지정하는 과정이 매우 직관적이고 유용했습니다.
2️⃣ Pawn과 Character의 차이점
Pawn은 완전히 자유롭게 커스터마이징할 수 있는 반면, Character는 보행형 캐릭터 구현에 특화되어 있어 작업 속도를 크게 단축시켜 줍니다.
프로젝트 특성에 따라 이 둘을 적절히 선택하는 것이 중요하다는 점을 알게 되었습니다.
3️⃣ 3인칭 카메라 구현
스프링 암과 카메라 컴포넌트를 활용해 자연스러운 3인칭 시점을 구현할 수 있었습니다.
캐릭터의 방향, 카메라 거리 등을 조정하며 사용자 경험을 개선할 수 있다는 점이 인상적이었습니다.