비타Cpp

UE4 - 게임 플레이 프레임워크 클래스들 본문

Unreal Engine

UE4 - 게임 플레이 프레임워크 클래스들

멍C 2022. 1. 29. 15:22

언리얼 엔진의 게임 플레이 플레임워크

언리얼 엔진의 게임을 이루는 구성 요소는 크게 4가지 클래스로 구분된다.

 

  • 게임의 규칙을 정의하고 진행상황을 기록하는 게임 플레이 클래스 - GameMode, GameState, PlayerState...
  • 플레이어, 아군, 적군같은 아바타(언리얼에서는 이를 Pawn이라고 한다.) 클래스 - Pawn, Character...
  • Pawn클래스를 제어하는 컨트롤러 클래스 - Controller, PlayerController, AIController...
  • 플레이어에게 게임에 관한 정보를 표시해주는 출력 관련 클래스 - HUD, Camera...

 


1. 게임플레이 클래스 - GameMode, GameState

 

GameMode

모든 게임들에는 기본적인 토대들이 있으며, 이러한 규칙들이 게임 모드를 이룹니다. 여기서 말하는 기본적인 토대들의 예는 다음과 같은 것들이 있다.

  • 존재하는 플레이어와 관람자의 수는 물론, 허용된 플레이어와 관람자 최대 수
  • 플레이어가 게임에 들어오는 방식, 스폰 위치 선택 규칙과 기타 스폰/리스폰 동작 포함 가능
  • 게임 일시정지 가능 여부, 게임 일시정지 처리 방식
  • 레벨 간의 전환, 게임의 시네마틱 모드 시작 여부 포함

이러한 규칙들은 거의 모든 게임의 공통으로 정의되는 규칙이고 이러한 공통적인 규칙뿐만 아니라 개발자의 입맛대로 변형된 규칙들을 정의해줄 수 있습니다.

 

게임 모드에 흔히 쓰이는 베이스 클래스는 AGameModeBase와 AGameMode 이다. AGameMode는 AGameModeBase의 자손 클래스이다. 흔히 AGameMode는 멀티플레이 게임 구현이나 표준 게임 구현에 적합하고, AGameModeBase는 보다 더 단순한 게임모드 클래스입니다.

 

또한 게임 모드에서 파생되어 생성된 블루프린트는 다음과 같은 기본값 설정이 가능합니다. 

  • 기본 폰 클래스
  • HUD 클래스
  • 플레이어 컨트롤러 클래스
  • Spectator 클래스
  • Game State 클래스
  • Player State 클래스

물론, C++스크립트에서도 설정이 가능합니다.

 

 GameState 

Game State (게임 스테이트)는 클라이언트가 게임의 상태를 모니터링할 수 있도록 해줍니다. 개념적으로 게임 스테이트는 접속된 모든 클라이언트가 알아야 하는 정보, 플레이어 개개인이 아닌 게임 모드에 관련된 정보를 관리해야 합니다. 그래서 접속된 플레이어 목록, 깃발 뺏기 게임의 팀 점수, 오픈 월드 게임에서 완료한 미션 등과 같은 게임 전반적인 프로퍼티 기록을 유지할 수 있습니다.

 

게임 스테이트는 깃발 뺏기 게임에서 특정 플레이어가 팀 점수를 몇 점이나 올렸는가와 같은 개별 플레이어 단위의 기록을 유지하기에 좋은 곳은 아닙니다. 그런 부분은 Player State (플레이어 스테이트)에서 보다 깔끔하게 처리할 수 있기 때문입니다. 일반적으로 게임 스테이트는 게임 플레이 도중 변하면서 모두에게 관련이 있고 보일 수 있는 프로퍼티 기록을 유지해야 합니다. 게임 모드는 서버에만 존재하는 반면, 게임 스테이트는 서버에 존재하면서 모든 클라이언트에 리플리케이트되어, 연결된 모든 기기의 게임 최신 상태를 유지합니다.


2. Pawn 클래스 - Pawn, Character

 

Pawn

Pawn클래스는 플레이어나 AI가 제어할 수 있는 모든 액터의 베이스 클래스 입니다. Pawn은 이렇게 제어되는 액터들의 물리적인 표현입니다. 이는 액터의 시각적인 표현, 콜리전이나 물리적인 상호작용, 월드와의 상호 작용 방식들을 모두 Pawn에서 규정합니다.

 

Character 

Character클래스는 Pawn클래스에서 이족보행을 하는 인간형 Pawn의 서브 클래스 입니다. 캐릭터는 월드에서 걷기, 달리기, 점프, 비행, 수영 등이 가능한 직립 플레이어를 표현하기 위해 디자인된 것입니다. 이 클래스에는 기본적인 네트워킹이나 인풋 모델 구현도 추가되어 있습니다.

 


3. Controller 클래스

 

플레이어나 AI 개체 입장에서는 Controller 클래스는 뇌와 같은 역할을 수행합니다.

Controller는 Pawn에서 파생되어 나온 개체들을 빙의(Possess)하여 동작을 제어할 수 있는, 눈에 보이지 않는 액터입니다. 

 

Controller는 Possess와 UnPossess 함수로 폰의 제어권을 획득하거나 해제합니다.

 

기본적으로 폰과 컨트롤러는 1:1 대응관계를 가집니다. 기본적으로는 이러한 대응관계가 적합하나, RTS(실시간 전략 게임) 게임 같은 특정 유형의 게임에서는 하나의 컨트롤러가 다수의 폰을 제어하도록 수정이 필요합니다.

 

AIController

AIController는 플레이어가 직접 조종하지 않고 게임의 환경과 월드에서의 입력에 반응하여 폰을 동작 시킵니다.

 

PlayerController

PlayerController는 폰과 플레이어 사이의 인터페이스입니다. PlayerController를 설정 시 컨트롤러와 폰에 어떠한 함수들이 있는지 잘 고려해야 합니다. 단순히 하나의 폰을 조종하는 게임의 경우 Pawn에서 입력과 동작을 모두 처리할 수 있습니다. 하지만 제어하는 폰의 종류가 실시간으로 변하는 경우 PlayerController에서 입력을 처리하도록 하면 PlayerController는 Pawn에게 입력에 따른 동작을 명령할 수 있게 되어 더 효율적이게 됩니다.

 

또한 특정 값들은 PlayerController에 저장해야 될 수도 있습니다. PlayerController는 게임 내내 유지되어 비휘발성이지만, Pawn은 휘발성이기 때문입니다. 예를 들어 데스매치 스타일 게임에서 죽고 리스폰시 Pawn이 달라져도 PlayerController는 똑같게 설정하여 점수 같은 유지되어야 하는 값들을 날리지 않을 수 있습니다.


4. 카메라와 UI클래스

 

Camera

카메라는 플레이어가 월드를 보는 시점, 방식을 나타냅니다.

 

UI & HUD

User Interface (유저 인터페이스, UI) 및 Heads-up Display (머리 위 디스플레이, HUD)는 플레이어에게 게임에 대한 정보를 표시해 주기도 하고, 가끔은 플레이어와의 상호작용이 가능하기도 합니다.

'Unreal Engine' 카테고리의 다른 글

Logging Setting - 로깅 환경의 설정  (0) 2022.01.28
UE4 C++ 프로젝트의 동작  (0) 2021.09.24
Comments