GameMode란 ? 

게임의 전반적인 규칙과 흐름을 관리하는 관리자 입니다.

따라서 어떤Pawn이나 Character를 플레이어에게 스폰해줄지 
어떤 PlayerController를 사용할지 , 승패조건은 어떻게 설정할지
즉 게임 플레이의 핵심 로직을 담당합니다.

레벨별로 GameMode를 다르게 설정가능합니다.


GameMode의 주요 기능 과 책임


1. 스폰 (폰 , 폰을 상속받은 캐릭터)
2. 플레이어 컨트롤러 지정
3. 게임 규칙 관리
4. Game과 Player의 상태관리

 

GameMode를 생성시켜 블루프린트로 감싸 그 내부의 값을 보면 

다음과 같은 값들을 설정할 수 있습니다.


Default Pawn Class 
레벨 시작 시 플레이어가 조종하게 될 클래스를 지정합니다.

 

HUD Class 
게임화면에 표시되는 UI 요소를 관리하는 클래스를 지정합니다.

 

Player Controller Class : 
플레이어 입력 처리와 카메라 제어, UI와 상호작용을 담당하는 클래스를 지정합니다.


Game State Class / Player State Class 
게임의 상태 , 플레이어의 상태 관리 

Spectator Class : 
관전자모드에서 사용할 Pawn 클래스를 지정합니다
일반플레이어와 다른 이동 방식이나 카메라 제어가 필요할 때 활용합니다.

 

GameMode에 대해 간단하게 알아볼 수 있는 시간이였고, 이제 게임모드가 관리하는 폰클래스에 대해 

좀 더 알아보려고 합니다.



Pawn클래스란? 
폰은 플레이어 혹은 AI가 소유할 수 있는 가장 상위 클래스이며
이동,충돌,중력,네트워크에 관련된 기능이 기본적으로 포함되어 있지 않아서 
직접 구현해야 한다.
한마디로 나만의 로직을 구현하는 내 맘대로의 클래스!!!! 라고 생각됩니다.

Pawn클래스도 액터를 상속받은 자식클래스로써, 액터의 라이프사이클을 따라갑니다.


Character클래스란?

캐릭터는 폰을 상속받아 만들어진 자식 클래스 중 하나입니다.

CharacterMovementComponent 를 포함하고 있어,
캐릭터의 움직임에 관련된 메서드 및 네트워크 동기화 등 
미리 구현된 기능을 통해 원하는 캐릭터를 쉽게 만들 수 있습니다.
하지만 미리 구현된 기능이 있다는 것은 다른말로 제약이 있는 것이라고 생각합니다.

내가 구현할 폰 클래스가 사람의 움직임을 닮은 클래스라면 사용해도 되지만 

골렘만의 독창적인 움직임을 만들고 싶다면
다시말해 내가 원하는 방식대로 움직이는 폰클래스(캐릭터 포함)를 만들기 위해서는

캐릭터 클래스를 사용하면 오히려 손해입니다.

그렇기에 

내가 CharacterMoveMentComponet에서 무슨 역할을 하는지를 제대로 알아야겠다는 생각이 들었습니다.

// TODO : CharacterMoveMentComponet가 정확히 무슨 역할인가? 


요새 점점 배워야할 내용들이 늘어나고 있어, 알아보고 조사하는데 시간을 많이 사용합니다.
이는 점점 내가 알아야할 것들이 늘어나고 처음이기 때문에 당연한 현상이라고 생각합니다.

그렇기 때문에 최대 2시간정도만 알아보고, 아니다 싶은건 수단과 방법 가리지 않고 물어보고,

알아보는데에 있어 나만의 우선순위를 설정해야겠다는 생각이 듭니다.

조만간 TODO목록을 정리해야겠습니다 ㅠㅠ




캐릭터의 구조는 다음과 같습니다.
Root - CapsuleComponent
                -  ArrowComponent
                -  SkeletalMeshComponent
                -  CharacterMovementComponent


CapsuleComponent 란?
Scene컴포넌트의 기능에 콜리젼이 추가된 형태로 
충돌하는 범위를 정의하는 콜리전 컴포넌트입니다.

ArrowComponent 란?
캐릭터가 바라보는 방향을 알려주는 컴포넌트이고, 
주로 편집기에서 디버깅용으로 사용합니다.

SkeletalMeshComponent 란? 
캐릭터의 뼈대이며
Mesh와 Anim을 통해 외형과 동작을 제어합니다.

CharacterMovementComponent : 
Pawn과 다른 가장 큰 이유로, 
캐릭터의 물리적 이동을 담당합니다.



캐릭터 클래스를 만들었다면, 우리는 이제 GameMode에게 
디폴트폰클래스가 누구인지를 알려줘야합니다.

따라서 GameMode가 생성될 때 DefaultPawnClass를 
내가 생성한 캐릭터의 클래스로 설정해줘야합니다.

예를들어 
AMyGameMode라는 게임모드와
AMyCharacter라는 캐릭터가 있다고 하겠습니다.

AMyGameMode::AMyGameMode()
{
DefaultPawnClass = AMyCharacter:: StaticClass(); 
}


//cf StaticClass()란?
언리얼 엔진이 클래스의 정보를 런타임에 참조할 수 있도록 제공하는 정적함수
//TODO : StaticClass에 대해 좀 더 정확하게 



StaticClass를 써서  Default로 설정해줍니다.

이렇게 설정을 해놓으면 게임이 시작할 때 GameMode에 의해
캐릭터가 자동으로 나오게 되고, PlayerController를 통해 캐릭터를 조작할 수 있습니다.

 

공부 목적으로 만든 블로그입니다 ! 사실과 다른 내용은 댓글로 알려주시면 감사하겠습니다 !

+ Recent posts