🎮

GameInstance/GameMode/GameState/PlayerState の違いまとめ

に公開

UE5でオンラインゲームを開発し始めてどこに何の情報を持たせるか悩んだのでまとめる。

GameInstance

項目 内容
ライフサイクル ゲーム全体で1つだけ常駐(アプリ起動〜終了まで)レベル遷移しても消えない
レプリケーション サーバーとクライアントそれぞれ独立に存在しレプリケーションされない
主な用途 グローバル設定保存、セッション管理など
主な関数 Init(), Shutdown()

GameMode

項目 内容
ライフサイクル 各レベルに1つ(レベル切り替えで変わる)
レプリケーション サーバーのみに存在し、クライアントでは存在しない
主な用途 プレイヤーのスポーン、勝敗判定、ルール管理
主な関数 StartPlay(), ChoosePlayerStart(), HandleMatchHasEnded()

GameState

項目 内容
ライフサイクル 各レベルに1つ
レプリケーション サーバーで1つ作られクライアントにレプリケートされる
主な用途 試合の進行状態(残り時間、ラウンド数など)、プレイヤーリスト保持
主な関数 OnRep_MatchState, HandleBeginPlay()

GameModeとの違いはレプリケートされて全てのクライアントで値を共有できること。
ゲーム中の全体に関わる動的な値を保持するのに使える。


PlayerState

項目 内容
ライフサイクル 各プレイヤーに1つ
レプリケーション サーバーとすべてのクライアントで作成され、全ての環境にレプリケートされる
主な用途 プレイヤーのスコア、選択キャラ、名前などのプレイヤー情報共有
主な関数 OnRep_スコア, CopyProperties()

各プレイヤーの情報を保持し、互いのプレイヤーで参照できる。
SeamlessTravelを使うとオンラインでマップをまたいで値が保持される。


PlayerController

項目 内容
ライフサイクル 各プレイヤーに1つ(接続時に生成)
レプリケーション サーバーとクライアントそれぞれに存在、サーバーには全てのクライアントのものがレプリケートされる
主な用途 入力処理、UI操作、カメラ制御
主な関数 SetupInputComponent(), BeginPlay(), Tick()

参考

Discussion