Labyrinth – ゲーム進行管理

設計

ゲーム進行とは、第1話、第2話といった舞台において、ゲームスタートからゲームクリアまでの道筋のことを指します。

ゲーム進行はGameflowサブレベルが管理します。ゲームプレイ中に謎を解いてカットシーンが始まったり、秘密の部屋に立ち入ったりすると、Gameflowサブレベルが検知してゲームを進行していきます。

進行フラグ

マップ内のゲーム進行フラグはエクセルで作成し、JSONデータで扱います。

フラグ変数はGameInstanceが保持しており、サブレベルからはマクロを介してアクセスします。

GameInstance内部ではInt型やBool型で管理しますが、サブレベルから扱う際は数値に対応したString型のラベル名で操作します。

進行フラグの種類

ゲーム進行フラグは、一つのメインフラグと複数のサブフラグから構成されます。

メインフラグ

メインフラグはゲーム本編における、スタートからクリアまでの進行度を表しています。

最初のイントロ用カットシーンが始まり、それが終わると基本操作のチュートリアルが始まるといったような大枠の流れを定義します。

サブフラグ

サブフラグは謎解きの合否などの細かなフラグを管理します。

このフラグをどのように使用するかはゲームフローの自由です。

例えば3つの謎解きを解くとストーリーが進むような場面では、謎解き用の3つのサブフラグを使用し、全て解けたらメインフラグを進める実装になります。

実装

メインフラグごとの処理

先ほどのCUTSCENE_01や、TUTORIAL_01等のメインフラグの値をそれぞれ一つのシーンとみなします。

Gameflowサブレベルのレベルブループリントの中で、メインフラグごとにイベントグラフを作成し、Setup/Begin/Play/Endのカスタムイベントを用意します。

Setupイベント

Setupイベントは、Begin、Play、Endのカスタムイベントをイベントディスパッチャにバインドするだけの処理をします。この実装はどのメインフラグでも共通です。

GF_GameFlowTest_FREE_Beginグループの中身

 

Beginイベント

Beginイベントは、シーンで必要なサブレベルの読み込みや、プレイヤーの初期設定などの処理を実行します。
ロードなどの処理に時間のかかるようなLatentノードもここで実行します。

以下はカットシーンサブレベルを再生するの際のBeginイベントの実装です。

最後にBeginGameflowFinishedのイベントディスパッチャーを呼ぶ事で準備完了したことをGameflowに伝えます。

Playイベント

Playイベントは、サブレベルの再生開始などの処理を実行します。

Endイベント

Endイベントは、主に読み込んだサブレベルのアンロード処理を実行します。

最後にEndGameflowFinishedのイベントディスパッチャーを呼ぶ事で終了処理が完了したことをGameflowに伝えます。

メインフラグの管理

Gameflowサブレベルがメインフラグのセットアップや切り替えを管理します。

以下の実装はどのGameflowサブレベルでも共通の処理です。

ChangeGameFlowイベント

メインフラグを切り替えるイベントです。現在実行中のゲーム進行のEndイベントを呼んだ後に、新しいゲーム進行のBeginイベントとPlayイベントを呼び出します。