언리얼 개발/탐구(이론)

언리얼 멀티플레이 시스템의 이해 (Gameplay Framework)

WhNi 2024. 5. 7. 18:07

언리얼에는 멀티플레이 시스템이 존재한다.

멀티플레이의 목적은 동일한 게임을 여러 사람이 함께 즐기는것이 목표인데, 개발자한테는 게임의 여러 인스턴스가 동시에 실행되는 것이 목표이다. 

 

언리얼은 총 3가지의 인스턴스를 다루는데

 

- 싱글플레이

- 특정  호스트가 연 세션에 참가하여 즐기는 멀티플레이 (호스트로 게임 참여)

- 인터넷(서버)를 통해서 각자의 클라에서 데이터를 공유받아 즐기는 멀티플레이 (별도의 서버 존재, 호스트 게임 참여 X)

(클라는 믿으면 안된다고  한다. 클라 믿는 순간 치트가 난무하는 현상이 일어난다고 한다.) 

 

 

이렇게 3개를 다룬다. 중요한 점은 이렇게 원하는 멀티플레이 구성 방식에 따라 최적화 및 기능 구현등이 달라지는데 차차 알아가보자. 

 

먼저, 바로 네트워크에 대해서 알아보기 보다는, 먼저 어떤걸 만들어야 하는가 부터 알아보자  

 

  • AGameMode
  • AGameState
  • APlayerState
  • APwan and ACharacter
  • APlayerController
  • AHUD
  • UUserWidget

이렇게 7가지의 클래스가  게임을 플레이 하기 위한 Framework들이다. 

 

하나씩 살펴보자 

 

AGameMode

 

게임모드는 게임의 규칙을 정하는 클래스이다. 주로 Spawn 하는 객체들을 다룬다고 보면된다. 서버에만 존재한다는 특징을 가지고 있다.  Ex) pawn, playerController, State 등등 을 설정할 수 있다. 

 

게임의 규칙을 정하는 것이기에,  누구와 누구가 팀인가? 이기는 조건은 무엇인가? 어떻게 포인트를 얻는가? 어떤 캐릭터와 어떤  무기가 허락되는가? 에 대한 규칙을 부여할 수 있는게 GameMode라고 생각하면 된다. 

 

AGameMode는  AGameModeBase로 4 버전 이후에  분리되었는데, Base가 분리된 이유는 GameMode의 모든 기능이 다 필요하지는 않아서 라고 한다. 

 

약식으로 필요한 경우 Base, 전부 필요한 경우는  GamMode를 쓰는게 좋다는 얘기이다. 

 

 

AGameState

State는 서버와 클라이언트  사이에서 중요한 데이터들을 공유하는 클래스 이다.  

Replicate 되어서 모든 클라에 접근할 수 있다. 

 

GameMode가 이기기 위한 킬 수를 설정했다면, State는  플레이어 각자  혹은 팀이 올린 킬 수를 체크하는 클래스인 셈이다.  

 

APlayerState

개별 플레이어에 관한 정보를 관리하는 클래스.

캐릭터의 이름이라던가, 점수, ping, Team ID 같은 것을 담은 플레이어의 상태를 나타낸다. 

 

APwan and ACharacter

pawn은 게임 내에서 플레이어나 AI 가 제어하는 기본 클래스.

Character는 pawn을 상속받은 애니메이션, 물리적 상호작용 로직을 실행하는 클래스

 

APlayerController

플레이어의 입력을 받아 캐릭터나 게임 요소를 제어하는 클래스

 

AHUD

게임의 시각적 인터페이스를 담당. 직접적인 게임플레이 제어는 아니지만, 플레이어에게 중요한 정보를 시각적으로 제공하는 클래스

 

UUserWidget

개인 클라에서 플레이어에게 제공되는 게임플레이 상호작용 클래스. (메뉴, 스킬창, 상태창)

 

앞으로는 이것들을 제작해서 멀티플레이가 가능한 게임을 하나 제작할 예정이다.  이건 멀티플레이를 위한 내용이였지만, 기본적으로 어느 게임에서나 쓰는 FrameWork이기 때문에 알아두는게 좋다.