게임 모드, 스테이트 블루프린트
지금까지 우리는 캐릭터의 애니메이션, UI, AI 등 게임을 구성하는 다양한 개별 요소들을 다루었습니다. 하지만 이러한 요소들이 유기적으로 상호작용하고, 게임의 규칙과 흐름을 제어하며, 플레이어에게 일관된 경험을 제공하기 위해서는 견고한 게임플레이 프레임워크(Gameplay Framework) 가 필요합니다. 언리얼 엔진은 이를 위해 미리 정의된 강력한 클래스 계층 구조를 제공합니다.
이번 장에서는 언리얼 엔진 게임플레이 프레임워크의 핵심인 게임 모드(Game Mode), 게임 스테이트(Game State), 플레이어 스테이트(Player State) 에 대해 자세히 알아보겠습니다. 이들은 게임의 규칙과 상태를 관리하는 데 필수적인 요소입니다.
언리얼 엔진의 게임플레이 프레임워크는 여러 전용 클래스들이 협력하여 게임의 전반적인 규칙, 흐름, 그리고 현재 상태를 관리하도록 설계되어 있습니다. 이들은 각각 고유한 역할과 책임 영역을 가집니다.
게임 모드 (Game Mode)
게임 모드 (Game Mode) 는 게임의 규칙을 정의하고 관리하는 클래스입니다. 이는 해당 게임의 전반적인 플레이 방식과 환경 설정을 제어합니다. 게임 모드는 서버에서만 존재하며, 클라이언트에는 존재하지 않습니다. 따라서 게임 모드에서 정의된 로직은 모든 플레이어에게 공통적으로 적용되는 규칙과 관련되어야 합니다.
주요 역할
- 게임 규칙 정의: 승리 조건, 패배 조건, 점수 계산 방식 등 게임의 핵심 규칙을 설정합니다.
- 기본 클래스 설정: 해당 레벨에서 사용될 기본 폰(Default Pawn Class), AI 컨트롤러(AI Controller Class), 플레이어 컨트롤러(Player Controller Class), HUD 클래스, 게임 스테이트 클래스, 플레이어 스테이트 클래스 등을 지정합니다.
- 플레이어 스폰: 플레이어가 게임에 접속했을 때 스폰될 위치(Player Start)를 선택하고 캐릭터를 스폰합니다.
- 게임 흐름 제어: 라운드 시작/종료, 게임 시작/종료, 일시정지 등의 게임 전반적인 흐름을 관리합니다.
- 플레이어 접속/연결 해제 처리: 플레이어가 서버에 접속하거나 연결이 끊겼을 때의 로직을 처리합니다.
- (싱글 플레이어 게임의 경우) 전반적인 게임 상태 관리: 싱글 플레이어 게임에서는 게임 스테이트가 필요 없을 정도로 간단하다면 게임 모드가 직접 게임 상태를 관리하기도 합니다.
생성 및 설정 방법
새 블루프린트 클래스 생성: 콘텐츠 브라우저에서 마우스 오른쪽 버튼 클릭 > 블루프린트 클래스(Blueprint Class)
> GameModeBase
또는 GameMode
를 부모 클래스로 선택합니다.
GameModeBase
: 기본적인 게임 모드 기능을 제공하며, 대부분의 새 프로젝트에서 권장됩니다.GameMode
:GameModeBase
의 상위 클래스로, 레거시 시스템이나 특정 멀티플레이어 기능을 추가로 제공합니다. 특별한 이유가 없다면GameModeBase
를 사용하는 것이 좋습니다.- 이름을 지정합니다. (예:
GM_MyGame
)
프로젝트 기본 게임 모드 설정
편집(Edit)
>프로젝트 세팅(Project Settings)
>맵 및 모드(Maps & Modes)
로 이동합니다.Default GameMode
드롭다운에서GM_MyGame
을 선택합니다.
레벨별 게임 모드 오버라이드
- 특정 레벨에서만 다른 게임 모드를 사용하고 싶다면, 해당 레벨 에디터에서
월드 세팅(World Settings)
패널을 엽니다. 게임 모드(Game Mode)
섹션에서GameMode Override
드롭다운을 통해 해당 레벨에서 사용할 게임 모드를 지정할 수 있습니다.
게임 스테이트 (Game State)
게임 스테이트 (Game State) 는 현재 게임의 전반적인 상태를 복제하고 관리하는 클래스입니다. 이는 서버와 모든 클라이언트에 동시에 존재하며 복제(Replicated)됩니다. 따라서 모든 플레이어가 볼 수 있어야 하는 정보, 예를 들어 남은 시간, 현재 라운드, 팀 점수, 전체 게임 이벤트 로그 등을 관리하는 데 적합합니다.
주요 역할
- 글로벌 게임 상태 저장: 게임의 현재 라운드, 남은 시간, 승리한 팀, 전체 게임의 점수 등 모든 플레이어에게 공유되어야 하는 정보를 저장하고 복제합니다.
- 게임 이벤트 로그: 게임 내에서 발생한 중요한 이벤트(예: 누가 누구를 처치했는지)를 기록하고 클라이언트에 전달합니다.
- 정보 동기화: 모든 클라이언트가 게임의 현재 상태에 대한 일관된 정보를 가질 수 있도록 합니다.
생성 및 설정 방법
새 블루프린트 클래스 생성: 콘텐츠 브라우저에서 마우스 오른쪽 버튼 클릭 > 블루프린트 클래스(Blueprint Class)
> GameStateBase
또는 GameState
를 부모 클래스로 선택합니다.
GameStateBase
: 기본 게임 스테이트 기능을 제공합니다.GameState
:GameStateBase
의 상위 클래스로, 레거시 시스템이나 특정 멀티플레이어 기능을 추가로 제공합니다.- 이름을 지정합니다. (예:
GS_MyGame
)
게임 모드에 게임 스테이트 연결
- 여러분의 게임 모드 블루프린트(
GM_MyGame
)를 엽니다. 클래스 디폴트(Class Defaults)
를 클릭하고디테일(Details)
패널에서클래스(Classes)
섹션을 찾습니다.Game State Class
드롭다운에서GS_MyGame
을 선택합니다.
플레이어 스테이트 (Player State)
플레이어 스테이트 (Player State) 는 각 개별 플레이어의 현재 상태를 복제하고 관리하는 클래스입니다. 게임 스테이트와 마찬가지로, 서버와 모든 클라이언트에 동시에 존재하며 복제됩니다. 따라서 다른 플레이어에게도 보여져야 하는 해당 플레이어만의 정보(점수, 이름, 처치 횟수, 현재 팀 등)를 관리하는 데 사용됩니다.
주요 역할
- 개별 플레이어 정보 저장: 각 플레이어의 점수, 킬/데스 수, 현재 체력, 플레이어 이름, 팀 정보 등 해당 플레이어 고유의 게임 관련 데이터를 저장하고 복제합니다.
- 정보 동기화: 멀티플레이어 게임에서 다른 클라이언트의 플레이어 상태를 동기화하여, 모든 플레이어가 서로의 점수나 상태를 볼 수 있도록 합니다. (예: 스코어보드)
- 영구적인 플레이어 정보: 플레이어가 사망하여 폰이 변경되거나 재스폰되더라도 플레이어 스테이트는 유지됩니다.
생성 및 설정 방법
새 블루프린트 클래스 생성: 콘텐츠 브라우저에서 마우스 오른쪽 버튼 클릭 > 블루프린트 클래스(Blueprint Class)
> PlayerState
또는 PlayerStateBase
를 부모 클래스로 선택합니다.
PlayerState
가 일반적입니다.- 이름을 지정합니다. (예:
PS_MyPlayer
)
게임 모드에 플레이어 스테이트 연결
- 여러분의 게임 모드 블루프린트(
GM_MyGame
)를 엽니다. 클래스 디폴트(Class Defaults)
를 클릭하고디테일(Details)
패널에서클래스(Classes)
섹션을 찾습니다.Player State Class
드롭다운에서PS_MyPlayer
를 선택합니다.
요약 및 관계
클래스 | 존재 위치 | 역할 | 복제 여부 |
---|---|---|---|
게임 모드 (Game Mode) | 서버에만 존재 | 게임 규칙, 흐름, 기본 클래스 설정, 스폰 등 | X |
게임 스테이트 (Game State) | 서버 + 모든 클라이언트 | 게임 전체의 상태(점수, 시간, 라운드) 관리 | O |
플레이어 스테이트 (Player State) | 서버 + 모든 클라이언트 | 각 플레이어의 상태(개인 점수, 킬/데스) 관리 | O |
관계
- 게임 모드는 해당 게임에 어떤
게임 스테이트
와플레이어 스테이트
클래스를 사용할지 정의합니다. - 게임플레이 중
게임 모드
는 서버에서만 게임의 전반적인 규칙을 적용하고 흐름을 제어합니다. 게임 스테이트
는 게임의 글로벌 정보를 모든 플레이어에게 동기화합니다.플레이어 스테이트
는 각 플레이어의 개별적인 정보를 모든 플레이어에게 동기화합니다.
이러한 프레임워크 클래스들은 멀티플레이어 게임에서 특히 중요하며, 각각의 역할 분담을 통해 게임 로직을 체계적으로 관리하고 네트워크 동기화를 효율적으로 처리할 수 있게 해줍니다. 싱글 플레이어 게임에서도 이 구조를 따르면 코드를 깔끔하게 유지하고 확장성을 높일 수 있습니다.
이번 절에서는 언리얼 엔진 게임플레이 프레임워크의 핵심인 게임 모드, 게임 스테이트, 플레이어 스테이트의 역할과 기본적인 설정 방법에 대해 알아보았습니다. 이 클래스들은 게임의 규칙과 상태를 정의하고 관리하는 데 필수적인 요소입니다.