🔰

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

に公開

はじめに

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

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

UEのメインループってどこ?

DirectXやC++で0から作っていた方は、main()関数などを使ってメインループを回していたと思いますが、UEにおいてはこれを開発者が直接書くことはありません。

UEの処理は大まかに以下の階層で駆動しているようです。

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

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

クラスの役割とライフサイクル

そもそもGameModeで設定できる管理クラスはいつからいつまで使用できるんだろう?そのライフサイクルを知っておいた方がよさそうです。
↓↓ 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