クラスの構造
クラス初期設定

ギミッククラスはBP_Gimmickブループリントを親クラスとして作成します。
Tick処理はデフォルトでOFFになっています。カメラ操作する際にTickの有効無効を切り替えます。
ビューポート
ギミックの基本的な構成はこのようになっています。例としてシンプルな扉のブループリントを用意しました。
カメラ関連
CameraTarget, SprintArm, Camera, SceneCaptureComponent2Dは、ギミック専用のカメラとして使用します。
ギミック調査開始タッチ判定用初回コリジョン(CollisionBox_GimmickStart)
ColisionBox_GimmickStartは、このギミックを調べる際のタッチ判定のために存在します。
BP_PlayerController内のタッチレイキャスト判定で使用します。
AnimationRoot
AnimationRootはシーケンサー再生時の座標操作で使用します。
調査中のタッチ判定用コリジョン(CollisionBox_Knob)
ドアノブであるKnobの子に、ドアノブタッチ判定用のコリジョンを配置しています。
コリジョンプリセットはタッチのレイだけを検知するAnalyzeTouchRaycastというプリセットを用意します。
カメラ用コリジョン作成
未実装です。
ステートの実装
ギミッククラスは複数のステート(状態)を持ちます。
例えばBP_GimmickTest_Doorというシンプルなドアのギミックでは、
- Idle ・・・ 扉が閉まっている初期状態
- Open ・・・ 扉を開くカットシーンを再生している状態
- Opened ・・・ 扉が開いている状態
という3つのステートがあります。
ステート変数
ステートを保持する変数は、GameplayTagを使用しています。状態を一元管理できるので便利です。
ステートごとの実装
ステートごとにグラフを用意して実装しています。
それぞれのステートごとに、ステート切り替え時に呼ばれるBeginイベントとEndイベントを用意しています。
クラスの実装
BeginAnalyze & EndAnalyze
プレイヤーのギミック調査開始時&終了時の処理を実装します。
BeginAnalyzeはギミックを調べた際のズームインが開始した時点で呼ばれます。
EndAnalyzeはギミックを調べ終わった際のズームアウトが完了した時点で呼ばれます。
ギミックで使用するサブレベルの読み込みなどを行った後、ギミックのステートを切り替えます。
BeginState & EndState
StateGraphというグラフを用意して、ステート切り替え処理を実装します。
BeginStateとEndStateのそれぞれで、現在のステートのBeginイベント / Endイベントを呼び出します。
ステートごとの基本的な実装
ステートごとの実装は、そのステートによって変わりますが、大まかな構造は以下のようになります。
こちらは操作可能なステートの一例です。
各種機能の有効化 / 無効化
Beingイベントにてこのステートで使用する機能を有効にし、Endイベントにてそれらを無効化します。上図では、カメラ操作、戻るボタン、ステート固有のタップ操作を有効にしています。
カメラパラメータの設定
Beginイベント内のSetCameraControlParam関数にて、カメラ操作の有効範囲を設定しています。
このパラメータを元に、親クラスのBP_Gimmickがカメラ操作を処理します。
ステート固有の処理
青いコメントボックスで囲まれた処理が、ステート固有の処理です。
このステートではドアノブをタッチすると次のステートに進むため、タッチ判定の処理が実装されています。
カットシーンを再生するステートの処理
ギミック調査時のカットシーンを再生する処理はこちらの記事に記載しています。