🔰

【Unreal Engine5】GameModeで設定できるクラスとライフサイクル

に公開
2026/01/01

はじめに

Unreal Engineを始めるとき、どこから手を付けよう... となりませんか? 僕はなりました。
GameState
PlayerController
GameInstance…
管理クラスが多くて、どこに何を書くのが正解か分からん...。

↑ のクラスは、GameModeで設定できるクラスですが、結局これってどういうやつなの?

UEのメインループ

まず、このGameModeで設定できるクラスたちはなぜ使用できるのでしょうか?
メインループの中で勝手に設定されるよう構成されているのでしょうか?
一度、UE自体のループについても知っておいた方がよさそうです。

DirectXやC++で0から作っていた方は、main()関数などを使ってメインループを回していたと思いますが、UEにおいてはこれを開発者が直接書くことはないようで、
UEの処理は大まかに以下の階層で駆動しているようです。

  1. Engine Loop : エンジンがハードウェア入力や時間を計算
  2. World Tick : 現在のレベル(UWorld)に更新を命令
  3. Actor Tick : レベルが、配置されているすべてのActor・ComponentのTickを呼ぶ

つまり、ループそのものを作る必要はなく、エンジンから呼び出されるTickに処理を書き込む のがUEのスタイルということなんですね。

ですが、 基本的にUEではクラスはTickではなく、イベント駆動型が推奨されます。
そこで、今回のクラスたちの出番というわけです。

GameModeで設定できるクラスの役割とライフサイクル

GameModeで設定できる管理クラスは特定のタイミングで処理が呼ばれます。
エンジン側が勝手に呼ぶタイミングを設定してくれているのです。
例えば、PlayerControllerのコンストラクタにWidgetを生成するコードを書いたとしましょう。
すると、Widgetはレベルに入ったタイミングで生成されます。

それを踏まえると、各クラスのライフサイクルを知った方がよいことは何となく分かりますかね?
ライフサイクルが分かれば、「このタイミングで表示したい!」「この期間はデータを保持したい!」って時に、「じゃあこのクラスだな」ってのが分かりますから。

↓↓ GameModeで設定できるクラスを寿命の長い順に紹介します。↓↓


【寿命:長い】ゲーム起動中、常に生存(永続)

このクラスは常に生存します。削除されることはありません。

クラス名 役割
GameInstance ゲーム全体で保持するデータを管理

【寿命:普通】レベル内で生存

対象のレベルがロードされていると生存しています。
他のレベルに移動すると削除され、新しいインスタンスが生成されます。

クラス名 役割 主な使用例
GameMode レベルのルール設定 勝利条件の判定・プレイヤーのスポーン地点設定 ※ マルチプレイ時は、サーバー上のみ存在する
GameState ゲームの盤面 現在のスコア・チームの点数(UIに表示したいデータ) ※ マルチプレイ時は、全プレイヤーに同期
PlayerController プレイヤー操作 入力の受信・HUD(キャラが消えてもHUDは消えないので)・カメラ操作

【寿命:短い】物体(Actor)の生存に依存

Actorが存在しているときに生存しています。
倒されたなどして、Actorが消えると共に削除されます。

クラス名 役割 主な使用例
Pawn / Character PlayerControllerに動かされる物体 HP・攻撃力・エモート

まとめ

「どこに何を書けばいいか分からない...」を解決するために、
「どこからどこまで生きるか(ライフサイクル)」 を知ることは、非常に大事なんじゃないでしょうか?
どのクラスがどういう意味があるのか、多すぎて分からなかったり・忘れたりするので、
こうしてメモしておくことも大事ですね。

GameModeでは設定しませんが、管理するクラスとして、Subsystem というものがあります。
そちらについては別記事にまとめようとしているので、気になる方はお待ちいただければと思います。

参考資料

https://dev.epicgames.com/documentation/ja-jp/unreal-engine/world-settings-in-unreal-engine
https://dev.epicgames.com/documentation/ja-jp/unreal-engine/gameplay-framework-in-unreal-engine

Discussion