アニメーションのブレンドとは、単一のキャラクターもしくはスケルタルメッシュ上の 2 つ以上のアニメーション間を滑らかに遷移させる、ということです。UE4 には、こうしたブレンドを適用するための様々な方法があります。Blend Spaces を使用する、重み付けによるバイアスまたはアルファ値に基づいて文字通り 2 つのアニメーションを加算的に組み合わせる、または既存のポーズに直接オーバーライドすることもできます。
アニメーションをスケルトンの特定のボーンとその全ての子供に直接送ることもできます。例えば、キャラクターが走っているアニメーションから開始し、射撃するアニメーションをキャラクターの上半身に選択的に適用することもできます。最終的に、以下の動画のように走り回りながら射撃するキャラクターができあがります。
1 - ブレンドするアニメーションを設定する
このステップではデフォルトのプレイヤー キャラクターを更新し、移動のアニメーションの上にレイヤー化したいアニメーションの AnimMontage を作成します。
このガイドでは Blueprint Third Person プロジェクトを使用し、Animation Starter Pack をプロジェクトに追加しました。

Epic Launcher の Marketplace から無料でアニメーション スターター パックをダウンロードできます。
-
プロジェクトが開いた状態で、コンテンツ ブラウザ の 「Content/ThirdPersonBP/Blueprints」 フォルダで ThirdPersonGameMode ブループリントを開きます。
-
Default Pawn Class (デフォルトのポーン クラス) でドロップダウン メニューをクリックし、Ue4ASP_Character を選択します。
-
コンパイル し 保存 してから、ブループリントを終了します。
-
コンテンツ ブラウザ で 「Content/AnimStarterPack」 フォルダを開きます。
-
Fire_Shotgun_Ironsights アニメーション上で 右クリック して、[Create] を選択し、次に [Create AnimMontage] を選択します。
上図のように検索ウィンドウ内で "Fire" と入力することでフィルタリングすることができます。
-
新しい AnimMontage を開き、虫眼鏡アイコンをクリックします。
Anim Slot Manager が開きます。これはスロットを名前で呼び出す場合にブレンド対象として使用可能な スロット を作成するために使用します。
-
[Add Slot (スロット追加)] ボタンをクリックし、スロットに 「UpperBody」 と名前を付け、[Save (保存)] をクリックします。
ここでは "UpperBody" という名前を選びましたが、今すぐに上半身をターゲットにするわけではありませんが、どこをターゲットとしているかがわかるように名前を割り当てました。
-
Montage Group セクション内のドロップダウン メニューをクリックして、それを DefaultGroup.UpperBody に変更してウィンドウを閉じます。
これで、モンタージュが DefaultGroup.UpperBody に関連付けられ、このスロットが呼び出されると再生されるようになります。
次のセクションでは、デフォルトのプレイヤー キャラクターを変更して調整し、いつ武器を発砲するかを定義します。
2 - Character ブループリントを更新する
このステップでは、Character ブループリントでスクリプトを作り、武器を発砲する Animation ブループリントに信号を送ります。
-
コンテンツ ブラウザ 内の Content/AnimStarterPack で、Ue4ASP_Character ブループリントを開きます。
-
Crouching セクションを探して、InputAction Crouch Event (Warning! 付き) 記号を削除します。
このノードには警告があります。プロジェクトが InputAction event である "Crouch" を使用するようにセットアップされていないからです。
-
グラフ内で 右クリック して、 C Key Event を追加し、以下のように接続します。
これで crouch を C キー押下に関連付けました。この入力は必要に応じて何にでも変更できます。
-
[MyBlueprint] ウィンドウで、 [変数を追加] ボタンをクリックして、 Boolean 変数を作成し、Fire Button Down と呼びます。
-
グラフ内を 右クリック して、 Left Mouse Button Key Event を追加します。
-
Alt を押したまま、グラフ内で Fire Button Down 変数をグラフにドラッグし、Set ノードを作成します。
-
ひとつ前のステップを繰り返し (または Set ノードをコピー)、以下のように接続します。
マウスの左ボタン を 押す と 、Fire Button Down が True になるようにします。マウスの左ボタン を 解放すると、 False になるようにします。
-
[Components] ウィンドウで CapsuleComponent を選択します。次に [Details (詳細)] パネルの [Hidden in Game (ゲーム内で非表示)] オプションにチェックを入れます。
これでカプセル コリジョンのデバッグ表示がオフになります。
-
コンパイル し 保存 してから、ブループリントを終了します。
かがんだり、武器を発砲する場合に Animation ブループリントに信号を送るようにキャラクターがセットアップされました。次のステップでは Animation ブループリント内でアニメーション グラフをセットアップし、アニメーション モンタージュと通常の動きのアニメーションとのブレンドを処理し、この 2 つをブレンドできるようにします。
3 - Anim Graph のセットアップ
このステップでは、Anim Graph をセットアップし、AnimMontage とステートマシンの動きのポーズのブレンドを処理します。
-
Game/AnimStarterPack で UE4ASP_HeroTPP_AnimBlueprint Animation ブループリントを開きます。
-
MyBlueprint ウィンドウ内で AnimGraph を開きます。
-
Locomotion ステートマシンからドラッグして New Save cached pose を探して追加します。
ここでは、Locomotion ステートマシンから結果のポーズを取得し、それをどこでも使用可能なキャッシュされたポーズに格納します。
-
ノード上で F2 を押して、キャッシュされたポーズに LocomotionCache などの名前を付けます。
-
グラフ内を 右クリック して、Use cached pose 'LocomotionCache' (またはキャッシュされたポーズに付けた任意の名前) を追加します。
-
Use cached pose ノードからドラッグして、Layered blend per bone ノードを検索して追加します。
Layered Blend Per Bone ノードでは、スケルトン上の指定されたボーンからのアニメーションをまとめてブレンドすることができます。
-
Use cached pose 'LocomotionCache' ノードをコピー/貼り付けし、そこからドラッグして、Slot 'DefaultSlot' ノードを追加します。
-
Slot ノードの Settings で、ドロップダウン メニューをクリックし、DefaultGroup.UpperBody を選択します。
このスロットを使用する Animation Montage がプレイのために呼び出されると、AnimGraph内で呼び出されるようになります。
-
Slot を Layered blend per bone ノードの Blend Poses 0 ピンに接続します。次にその出力を Result と Compile に接続します。
AnimGraph が完成しましたが、Layered blend per bone ノードの設定の一部を変更する必要があります。これは、後で行います。
4 - ブレンド設定を確定する
ブレンドしたアニメーションをレイヤー化し、どのボーンからブレンドを開始するかについて定義します。
-
UE4ASP_HeroTPP_AnimBlueprint の AnimGraph 内で、Layered blend per bone ノードをクリックします。次に [Layer Setup] セクションを展開し + 記号をクリックします。
-
Bone Name で spine_01 と入力します。次に [Blend Depth] を 1 に設定し、[Mesh Space Rotation Blend] にチェックを入れます。
このような設定で、射撃する AnimMontage を spine_01 ボーンから開始してスケルトンにブレンドすることができます。
-
[MyBlueprint] ウィンドウ内で EventGraph を開きます。
-
Cast To Ue4ASP_Character ノードの As Ue4ASP Character ピンをドラッグして Get Fire Button Down ノードを追加します。
これで、プレイヤーが発射ボタンを押しているか否かがわかります。
-
B を押したまま、グラフ内で 左クリック して、Branch ノードを作成し、それを Set Crouching の後に接続します。
Condition に、FireButtonDown ピンを差し込みます。
-
グラフ内を 右クリック して、 Montage Is Playing ノードを追加し、Fire_Shotgun_Ironsights_Montage を割り当てます。
-
Montage Is Playing ノードの Return Value から、 Branch を追加します。
-
以下の図のように、ステップ 5 の Branch を、新しい Branch に接続します。Montage to Play が使用するモンタージュに設定されている Montage Play ノードを追加します。
これで、モンタージュが現在再生しているかをチェックし、再生している場合はそれを再生しないようにします (再生していなければモンタージュを再生します)。
-
コンパイル し 保存 してから、ブループリント を閉じてレベル内の既存の ThirdPersonCharacter を削除します。
これでレベル内に配置されているものではなく、Game Mode で定義した選択したキャラクターを使用することができます。
-
エディタで Play (再生) します。
最終結果
マウスの左ボタン を押したままにすると、キャラクターが射撃する AnimMontage を再生します。射撃中に歩き回ったり、しゃがんで射撃することもできます ( C を押した状態で)。このガイドの内容で、メレー攻撃、リロードのアニメーションや移動中に行うその他のアニメーションを再生できるようにします。
Anim Montage で作成し、割り当てた UpperBody スロットを、他の Anim Montage にも割り当てることができます。AnimGraph には Slot ノードが割り当てられているため、このスロットが割り当てられている Anim Montage を再生するたびに、定義した設定で再生されます。