概要
動作確認環境: UE 5.4+
「GameMode、GameState、PlayerState…名前は似ているけど何が違うのかわからない」――これはUE開発を始めた多くの方が最初にぶつかる壁の1つです。特にマルチプレイヤーゲームでは、どのクラスがどこに存在し、何が複製されて何がされないのかを正しく理解していないと、サーバー・クライアント間のデータ同期で苦労します。
この3クラスの役割分担を理解すれば、シングルプレイヤーでもマルチプレイヤーでも、堅牢で拡張性の高いゲームロジックを構築できます。
3クラスの比較
まず全体像を把握しましょう。
| クラス | 存在場所 | 役割 | 複製 |
|---|---|---|---|
| GameMode | サーバーのみ | ゲームのルール定義・実行 | されない |
| GameState | サーバー+全クライアント | ゲーム全体の状態管理 | される |
| PlayerState | サーバー+全クライアント | 各プレイヤーの状態管理 | される |
GameModeがサーバーのみに存在するのが最も重要なポイントです。これはゲームのルール(勝利条件、スポーン位置、参加条件など)をクライアント側で改変させないための設計です。クライアントが知る必要のあるゲーム状態は、GameStateやPlayerStateを経由して同期されます。
GameMode:ルールブック
GameModeはゲームのルールそのものを定義するクラスです。「審判」や「ルールブック」と考えるとイメージしやすいでしょう。
主 な管理内容:
- プレイヤーの参加・退出時の処理(ログイン/ログアウト)
- Pawnのスポーン位置・タイミング・条件
- マッチの開始・終了条件
- ゲームモード固有のルール(デスマッチ、CTFなど)
AGameModeBase vs AGameMode
UEにはGameModeの基底クラスが2つあります。新規プロジェクトのデフォルトは AGameModeBase です。
| クラス | 特徴 | 推奨用途 |
|---|---|---|
AGameModeBase | シンプルで軽量 | シングルプレイヤー、非マッチベースのゲーム |
AGameMode | マッチステートマシン搭載 | チームデスマッチ等のマッチベースマルチプレイヤー |
AGameMode は AGameModeBase を継承し、以下の6つのマッチステートを管理するステートマシンが組み込まれています: EnteringMap → WaitingToStart → InProgress → WaitingPostMatch → LeavingMap(異常時は Aborted)。マッチの開始待機やポストゲーム画面の制御に使います。
GameModeはプロジェクト設定、レベルのワールド設定、またはURL引数として設定でき、レベルごとに異なるGameModeを使い分けることも可能です。
GameState:スコアボード
GameStateはゲーム全体の現在の状態を管理し、全クライアントに同期するクラスです。GameModeが「ルールブック」だとすれば、GameStateは「スコアボード」や「タイマー」のようなものです。
主な管理内容: