4.

UE5 レベル別 GameMode 切替完全ガイド

編集
この記事の要点
  • Unreal Engine の GameMode はレベル全体のルール(プレイヤー操作、勝敗判定、HUD、Pawn 配置)を定義
  • レベル別の上書きWorld Settings → GameMode Override で設定(最も簡単で標準的)
  • プロジェクト全体のデフォルトは Project Settings → Maps & Modes → Default GameMode
  • 動的切替は Open Level (Game Mode Class) または C++ で UGameplayStatics::OpenLevel + url 引数で ?game=...
  • GameModeBase は軽量・モバイル向け、GameMode はマッチステート(待機→開始→終了)付きでマルチプレイ向け
  • PIE(Play In Editor)では Editor PreferencesWorld Settings の Override が優先される

GameMode とレベルの関係

Unreal Engine の GameMode は、レベル(マップ)全体のルールを定義するクラスです。誰がプレイヤーを操作するか(PlayerController)、何を操作するか(Pawn / DefaultPawnClass)、HUD は何か、勝敗判定はどう行うか、スポーン位置はどこか、といった「ゲームの骨格」を担います。

1 つのレベルにつき GameMode は 1 つしかアクティブになりません。タイトル画面とインゲームで異なる挙動にしたい場合、レベルごとに GameMode を切り替えます。

方法 1: World Settings で Override(推奨)

もっとも簡単で標準的な方法。レベルを開いた状態で World Settings から GameMode を上書きします:

  1. レベル(マップ)を開く
  2. メニューから Window → World Settings を開く
  3. Game Mode セクション → GameMode Override ドロップダウン
  4. 使いたい GameMode(例: BP_MenuGameMode)を選択
  5. 必要に応じて Default Pawn Class / HUD Class / Player Controller Class / Game State / Player State を上書き

これでこのレベルを開いた時のみ、選択した GameMode が適用されます。プロジェクトのデフォルトは変えません。

方法 2: Project Settings でデフォルトを設定

全レベル共通で適用されるデフォルトを設定します:

  1. メニュー Edit → Project Settings
  2. 左メニュー Maps & Modes
  3. Default GameMode をプロジェクト全体のデフォルトに設定
  4. 必要に応じて Default Maps(Editor Startup Map / Game Default Map)も

World Settings の Override が指定されているレベルは Override が優先、無いレベルはここの Default が使われます。

方法 3: Open Level で動的に切替

レベル遷移時にゲームモードも変えたい場合、Open Level ノードの引数で指定できます:

Blueprint

  1. Open Level (by Name) ノード(標準)
  2. または Open Level (by Object Reference)
  3. Options 引数に ?game=BP_BattleGameMode のように追加

C++

#include "Kernel/GameplayStatics.h"

void AMyPlayerController::GoToBattle()
{
    // Options で GameMode を上書き
    UGameplayStatics::OpenLevel(
        this,
        FName(TEXT("BattleArena")),
        true,
        TEXT("?game=/Game/Blueprints/BP_BattleGameMode.BP_BattleGameMode_C")
    );
}

Options 文字列の構文は URL パラメータ風で、?game=... 以外にも ?listen(リッスンサーバー)、?MaxPlayers=4 等が指定できます。

優先順位

同じレベルに対して複数の指定がある場合、優先順位は次の通り:

  1. URL の ?game= オプション(OpenLevel の Options)
  2. World Settings の GameMode Override
  3. Project Settings の Default GameMode(フォールバック)

GameModeBase と GameMode の違い

項目GameModeBaseGameMode(旧)
基底クラスUE4.14+ の新基底GameModeBase を継承
マッチステート無し(軽量)WaitingToStart → InProgress → WaitingPostMatch → LeavingMap
用途シングル / モバイル / シンプルゲームマルチプレイヤー / 試合制ゲーム
関数OnPostLogin / HandleStartingNewPlayer 等+ HandleMatchHasStarted / HandleMatchHasEnded

シングルプレイなら GameModeBase 継承で十分。マッチ制やマルチプレイヤーで GameMode を使います。

レベル別の典型構成例

レベルGameModeDefault PawnHUD
L_MainMenuBP_MenuGameModeSpectator PawnBP_MenuHUD
L_LobbyBP_LobbyGameModeBP_LobbyPawnBP_LobbyHUD
L_BattleArenaBP_BattleGameModeBP_PlayerCharacterBP_BattleHUD
L_CutsceneBP_CutsceneGameMode無効(Sequencer 制御)無し

カスタム GameMode の作り方

Blueprint

  1. Content ブラウザで右クリック → Blueprint Class
  2. Parent Class を GameModeBase
  3. 名前を BP_BattleGameMode
  4. クラスデフォルト(Class Defaults)で:
    • Default Pawn Class
    • HUD Class
    • Player Controller Class
    • Game State Class / Player State Class

C++

// BattleGameMode.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/GameModeBase.h"
#include "BattleGameMode.generated.h"

UCLASS()
class MYGAME_API ABattleGameMode : public AGameModeBase
{
    GENERATED_BODY()
public:
    ABattleGameMode();

    virtual void StartPlay() override;
    virtual void HandleStartingNewPlayer_Implementation(APlayerController* NewPlayer) override;
};

// BattleGameMode.cpp
ABattleGameMode::ABattleGameMode()
{
    DefaultPawnClass = ABattleCharacter::StaticClass();
    PlayerControllerClass = ABattlePlayerController::StaticClass();
    HUDClass = ABattleHUD::StaticClass();
}

PIE(Play In Editor)での挙動

エディタで Play を押した時の挙動は次の優先順:

  1. Editor Preferences → Play → Game Mode(明示的に設定があれば)
  2. 現在開いているレベルの World Settings → GameMode Override
  3. Project Settings → Maps & Modes → Default GameMode

複数モードの切り分け(シングル / マルチ)

同じ Pawn・PlayerController でモードを分けたい場合、GameMode に分岐ロジックを書くより、異なる GameMode クラスを 2 つ作るのが Unreal の標準的アプローチです:

  • BP_SinglePlayerGameMode: PvE 用、AI 多数
  • BP_MultiplayerGameMode: PvP 用、マッチステート利用
  • 同じレベルを 2 つの GameMode で使う場合、Open Level の ?game= で動的選択

よくあるトラブル

Q: World Settings で Override したのに反映されない
A: ① レベルを保存していない、② PIE 開始前のキャッシュ。一度 Editor を再起動。③ Editor Preferences の Play GameMode が優先されていないか確認。

Q: Default Pawn が空中に出現する
A: GameMode の DefaultPawnClass が Spectator のまま。レベルに Player Start アクターを置き、GameMode に独自 Pawn を指定。

Q: Open Level の ?game= が効かない
A: パス記述ミス。Class の完全パス + _C サフィックスが必要。/Game/Blueprints/BP_BattleGameMode.BP_BattleGameMode_C のように書く。

FAQ

Q: GameMode をランタイムで切り替えられる?
A: 同一レベル内では基本不可。レベル遷移(Open Level)と同時に切り替えるのが標準。マッチ状態の遷移(GameMode の MatchState)でルールを変えるのは可能。

Q: GameMode はクライアントにレプリケートされる?
A: されません。GameMode はサーバー専用。クライアントに状態を渡すには GameState / PlayerState を使う。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. レベルを移動する方法
  2. レベルの「基本」テンプレートと「オープンワールド」テンプレートの違い
  3. Blueprintで現在開いているレベルが特定のレベルであるか調べる方法
  4. レベルごとにゲームモードを変更する方法
  5. 動的にインスタンスが属するレベルを変更する方法
  6. エディタ上でインスタンスが属するサブレベルを変更する方法
  7. とあるアクタから現在開いているレベルの変数にアクセスする方法
  8. プロジェクトを開いたときの最初のレベルを変更する方法