Labyrinth – ゲーム進行管理

設計

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

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

進行フラグ

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

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

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

進行フラグの種類

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

メインフラグ

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

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

サブフラグ

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

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

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

サブフラグは真偽値のものはGameplayTag型で管理します。

実装

メインフラグごとの処理

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

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

Beginイベント

Beginイベントは、シーンで必要なサブレベルの読み込みや、プレイヤーの初期設定などの処理を実行します。

事前ロード時に呼ばれる可能性があるため、Beginイベントでゲーム中に表示したり音声を再生してはいけません。

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

カットシーンを実際に制御するサブレベルをロードしているだけの単純な処理です。

最後に自身で用意したGameflowBeginCompleted関数を呼び出します。その中身は、マクロライブラリにBegin処理が完了したことを通知するのと、自身のLoadGameflowFinishedのイベントディスパッチャーを呼んでいます。

Playイベント

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

ここではまずプレイヤーステートの設定、プレイヤー座標の設定、チュートリアルの開始、次シーンの読み込み開始を行っています。

Endイベント

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

Beginイベントの時とは逆に、サブレベルのアンロードと、自身で用意したGameflowEndCompleted関数を呼び出します。その中身は、マクロライブラリにEnd処理が完了したことを通知するのと、自身のUnloadGameflowFinishedのイベントディスパッチャーを呼んでいます。