Labyrinth – ギミックのカットシーン

Labyrinth

カットシーンの構成

ギミック中にカットシーンが存在しないアクターであれば、マップ上に配置するのはギミック本体のブループリントだけで十分です。

ギミック中にカットシーンが存在するアクターの場合、ギミック本体とは別に、そのギミック専用のカットシーンレベルを用意する必要があります。

ほとんどのギミックはカットシーンが存在するので後者の構成になります。

ギミック専用カットシーンレベル

ギミック専用のカットシーンレベルには、ギミックで再生するアニメーションのレベルシーケンスアクターがマップに配置してあります。また、そのアニメーションに必要なカメラやキャラクターなどの各要素も配置されています。

各要素はActor Hidden In Gameにしておきます。

これらのアニメーション用アセットとギミック本体は別のレベルに存在するため、やり取りをするためにインターフェースを利用します。

レベルブループリントがインターフェースを実装し、ギミック本体からインターフェースを介して指示を受け取り、シーケンサーを再生します。

ギミック用カットシーンとストーリー用カットシーンの違い

ギミック中のカットシーンは、ストーリー進行時のカットシーンと以下の点で異なります。

  1. ギミックのトランスフォームに影響される
    ギミックがマップのどの場所に配置されているかによって、カットシーン内のアクターの位置も変わります。
    また、ゲーム進行によってギミックの場所が動的に変わる可能性もあります。
  2. ギミックが複数存在する可能性がある
    同じオブジェクトがマップ上に複数存在する可能性があり、その都度レベルシーケンスを用意すると膨大になる可能性があります。

ストーリー用カットシーンは一点ものであるのに対して、ギミック用カットシーンは使い回し前提となります。

これらの理由により、調査中のギミックの情報をシーケンサーに反映する仕組みが必要となります。

カットシーンの実装

ギミック情報をシーケンサーに反映する

ギミック情報として必要なのは、ギミックの位置情報やアニメーションする際のメッシュ情報などです。

これらを使用するために、ギミック本体からカットシーンレベルブループリントに対して、アニメーション再生を指示する際に、自身のブループリントインスタンスの参照を渡すインターフェースを用意します。

レベルブループリント側はこのインスタンスの情報を使って、シーケンサーを再生します。

ギミック側の実装

テスト用のギミックであるBP_GimmickTest_Doorを例に解説します。

扉を開けるカットシーンを再生する、Openというステートの実装を見てみます。

BP_GimmickTest_DoorのOpenイベントグラフの実装

Beginイベントにて、カットシーンを再生するインターフェース関数を呼び出しています。

引数Targetには対象のレベルブループリントを指定し、引数Actorには自身のインスタンスの参照を渡しています。

レベルブループリント側の実装

GimmickTest_Door_Cutsceneレベルブループリントのカットシーン再生時の処理

レベルブループリントは、アニメーション再生の指示を受け取るインターフェースを実装します。

ギミックの位置でシーケンサーを再生する

カメラやアクターをギミックの位置で再生するため、あらかじめ親となる空アクターを用意します。

シーケンサー再生時に空アクターをギミックの位置に移動することで、アニメーションが正しい位置で再生されます。

このため、元のアニメーションは原点を基準に作成しておきます。

アニメーションするアクターをバインドする

扉が開くアニメーションがあったとして、シーケンサーに登録さている扉アクターと、今自分が調べている扉アクターは別物であるため、紐づけ(バインド)する必要があります。

こうする事で扉を開くアニメーションを調査中の扉に適用することができます。

参考