ゲームプレイとシーケンサー アニメーションをブレンドする

ゲームプレイ アニメーションをレベル シーケンス ベースのアニメーションにスムーズにブレンドする方法を説明します。

Windows
MacOS
Linux

シネマティック シーケンスを作成する場合、既存のゲームプレイ アニメーションをレベル シーケンス内に含まれるアニメーションとブレンドさせることができます。例えば、操作可能なキャラクターがゲームプレイ中にドアまで歩き、キャラクターがドアを開けるようにシーケンサーをアニメートしたい場合や、プレイヤーがサードパーソン シューティングゲームでキャラクターをコントロールしていて、死角に回り込み、シネマティックな死亡シーケンスにブレンドさせたい場合です。シーケンサー、ブループリント、および Animation ブループリントを組み合わせて使用することで、キャラクターがいるゲームプレイ ポーズをシーケンサで定義された スロット アニメーションとブレンドできます。

この例では、Trigger Volume に入るときにキャラクターがどのようなゲームプレイ ポーズを取るかを取得し、シーケンサ内で死亡アニメーションとブレンドします。

1 - シーケンスをセットアップする

このステップでは、レベル シーケンスを設定し、ブレンドしたいアニメーションとプレイ可能なキャラクターを追加します。

この操作ガイドでは、Epic Marketplace から無料で入手できる Animation Starter Pack「ブループリントのサードパーソン テンプレート」 を使用しています。

AnimStarterPack.png

  1. プロジェクト内でレベルから ThirdPersonCharacter を削除し、[Ue4ASP_Character] を追加して、[Auto Possess Player][Player 0] に設定します。

    GameBlend_01.png

    必要に応じて「CapsuleComponent」を選択し、[Hidden in Game] オプションをオンにすることで、「CapsuleComponent」の表示を無効にすることができます。

    GameBlend_01b.png

  2. メイン ツールバーから [Cinematics (シネマティックス)] ボタンをクリックし、[Add Level Sequence (レベル シーケンスを追加)] を選択して、任意の名前で保存します。

    GameBlend_02.png

  3. レベル シーケンスで、「Ue4ASP_Character」アニメーション トラック を追加し、「Death_3」 をアニメーションとして割り当てます。

    GameBlend_03.png

  4. キーフレーム ウィンドウでアニメーションを右クリックし、プロパティで [When Finished (終了時)][Keep State (ステートを維持)] に変更します。

    GameBlend_03b.png

    これにより、レベル シーケンス終了時のアニメーション ステートを保持できます。また、下に強調表示されている [Slot Name] プロパティにも注意してください。

    GameBlend_03c.png

    Animation ブループリントがスケルタル メッシュを制御している場合、シーケンサはそのブループリント内のスロットでアニメーションを再生し、[Slot Name] プロパティで制御できます。その際、Animation ブループリントは、スロット アニメーションと、キャラクターが存在する可能性のあるゲーム ロジック ドリブンのアニメーションを何でもブレンドできます。

次のステップでは、アニメーション ブループリントとキャラクター ブループリントを設定して、ゲームプレイ アニメーションからこのステップで作成した死亡アニメーションにブレンドできるようにします。

2 - アニメーションとキャラクター ブループリントをセットアップする

この手順では、アニメーション ブループリントを設定して、ゲームプレイ ポーズを取り、レベル シーケンスで定義されたスロットアニメーションにブレンドできるようにします。

  1. コンテンツ ブラウザ で、「UE4ASP_HeroTPP_AnimBlueprint」 を開き、[My Blueprint (マイ ブループリント)] ウィンドウで [AnimGraph] をダブルクリックします。

    GameBlend_04.png

  2. 既存の Locomotion ステート マシーンの AnimGraph で、[New Save Cached Pose (新規保存のキャッシュされたポーズ...)] を作成し、それに 「lococache」 と名前を付けます。

    GameBlend_05.png

  3. 「lococache」 を 2 回使用し、1 つを Blend (ブレンド) ノードの [A] ピンに接続して、最終アニメーションポーズ (Final Animation Pose) にフィードします。

    GameBlend_06.png

  4. 他の「lococache」 から、Slot ノードを使用して ブレンドB ピンに接続し、 [Alpha] を右クリックして [Promote to Variable (変数へ昇格)] を選択した後、「Blend Interp」 と名前を付けます。

    GameBlend_07.png

  5. コンテンツブラウザ「Ue4ASP_Character」 ブループリントを開き、[Crouching] セクションを下のグラフに置き換えます。

    GameBlend_08.png

    上記では、InputAction Crouch ノードを C キーボード イベントと Flip Flop ノードに置き換えて、crouching ステートを切り替えます。

    このブループリントは、元々テンプレート プロジェクトにはない、しゃがむ動作の入力バインディングを含む別のプロジェクト用に作成されたものです。InputAction Crouch を標準の C キーボード イベントに置き換えることにより、ブループリント警告メッセージを削除するとともに、C キーを押してしゃがみ状態と非しゃがみ状態を切り替えることができます。

  6. DefaultSlotInterp という新しい Float 変数を作成し、[Instance Editable (インスタンス編集可能)] および [Expose to Cinematics (シネマティクスに公開)]「True」 に設定します。

    GameBlend_09.png

    シーケンサー内でこの変数を使用して、ブレンドし、実際のブレンドを処理するアニメーション ブループリント変数 Blend Interp に値を渡します。

  7. SetDefaultSlotInterp と呼ばれる新しい関数を作成し、[Details (詳細)] パネルに 「Float」 型の Interp と呼ばれる [Input (インプット)] を追加します。

    GameBlend_10.png

    Set (Property Value Name) という名前の関数を作成することにより、関連付けられたプロパティ値が変更されるたびにシーケンサによって呼び出される Proxy 関数を作成しました。この関数は、プロパティ値が変更された場合にのみ呼び出されます。そして、 イベント ティック または カスタム イベントタイムライン を使用して 「DefaultSlotInterp」 を反映するよりも効率的です。

  8. [Components (コンポーネント)] ウィンドウから、メッシュ にドラッグし、Get Anim Instance「Cast to UE4ASP_HeroTPP_AnimBlueprint」 を使用します。

    GameBlend_11.png

  9. [As UE4ASP Hero TPP Anim Blueprint] をオフにして、Set Blend Interp を使用し、[Interp] の値を [Blend Interp] に渡します。

    GameBlend_12.png

    [DefaultSlotInterp] の値がシーケンサを介して変更されるたびに、SetDefaultSlotInterp プロキシ関数が呼び出され、float 値がアニメーション ブループリントの [Blend Interp] 値に渡され、ポーズのブレンドに影響を与えます。

次のステップでは、[Default Slot Interp] プロパティをレベル シーケンスに追加して、アニメーション ブループリントの [Blend Interp] を制御できるようにします。また、レベルにトリガー ボックスを追加して、レベル シーケンスをアクティブにし、プレイヤーがトリガー ボックスのボリュームに入ったときにそれを再生できるようにします。

3 - シネマティックの公開された変数を使用する

ここで、アニメーション ブループリントに補間をフィードする float 変数 Default Slot Interp を追加し、ゲームプレイ ポーズからスロット アニメーションにブレンドするタイミングを決定します。また、次のステップで使用するレベルにトリガー ボックスを追加して、プレイヤーがボリュームに入ったときにレベル シーケンスの再生をトリガーできるようにします。

  1. 「Ue4ASP_Character」 のレベル シーケンス内で、[+ Track] ボタンをクリックし、新しい [Default Slot Interp] プロパティを割り当てます。

    GameBlend_13.png

  2. タイムラインを先にフレーム 25 (または任意のフレーム) に合わせて、値が 「1.0」[Default Slot Interp] のキーを追加します。

    GameBlend_14.png

  3. メイン レベル エディタの [Mode (モード)] パネルから、Triggerbox をレベルにドラッグし、サイズを変更して必要な場所に配置します。

    GameBlend_15.png

    再生中にトリガー ボリュームを表示できるようにしたい場合は、[Actor Hidden In Game] を「false」に設定することもできます。

このガイドの次の最後のステップでは、トリガー ボックスのボリュームに入るときにレベル シーケンスを再生するようにレベル ブループリントを設定します。

4 - シーケンスの再生とブレンドをトリガーする

設定をテストする前の最後のステップでは、レベル ブループリントを使用して、プレイヤーがトリガー ボックスに入ったときにレベル シーケンスをアクティブにします。シーケンスが開始されると、シネマティックスに公開される [DefaultSlotInterp] プロパティが変更され、「interp」値の更新が開始します。これにより、アニメーション ブループリントに対して、ゲームプレイ アニメーションからスロットアニメーションへのブレンドを開始するよう指示が出されます。

  1. トリガーボックス を選択した状態で、メイン ツールバーから [Blueprints (ブループリント)] ボタンをクリックし、[Open Level Blueprint (レベル ブループリントを開く)] を選択します。

    GameBlend_16.png

  2. グラフを右クリックし、トリガー ボックスの [Collision] で、 [Add On Actor Begin Overlap (On Actor Begin Overlap を追加)] を選択します。

    GameBlend_17.png

  3. レベル ビューポートに戻り、レベル シーケンスを選択してから、 レベル ブループリント で右クリックして、レベル シーケンスへの参照を追加します。

    GameBlend_18.png

  4. レベル シーケンスから、Get Sequence Player を使用し、次に Play ノードを使用して図のように接続します。

    GameBlend_19.png

  5. [Compile (コンパイル)] して [Save (保存)] し、[Play (プレイ)] をクリックしてエディタで再生します。

最終結果

キャラクターが Trigger Volume に入ると、現在のアニメーション ステートに関係なく、ゲームプレイ ポーズからシーケンサで定義された死亡ポーズにブレンドされ始めます。

シーケンスにカメラを追加することで、シーケンスで死亡アニメーションが開始するポイントをシフトできるようになり、ブレンドをもう一段レベルの高いものへと改善することもできます。

上記の例では、プレイヤーはトリガーに向かって歩いたり、走ったり、しゃがんだり、ジャンプしたりすることができます。そして、Trigger Volume に入ると死亡アニメーションにブレンドされます。

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback