ビデオの内容紹介
これまで準備してきたアニメーション モンタージュを再生するために、アニメーションブループリントのセットアップの続きを行います。具体的には、キャラクターの状態に応じてパンチのアニメーション モンタージュを再生できるようにします。
原題 Introduction to Third Person Blueprint game – 19 – Playing Our Animation Montage in UE4
[1]Punch イベントを作る
前回までは、アニメーション ブループリントで次のように組みました。
まず、スペースでイベントを作ります。右クリックして、[カスタム イベントを追加] を選択します。
イベントの名前は Punch にします。
このイベントが呼ばれたら、モンタージュを再生するようにします。そのためには、Montage Play (モンタージュ再生) を配置します。
Punc イベントの実行ピンとつないで、[Montage to Play] (再生すべきモンタージュ) をクリックします。
PunchingMontage を選択します。(これしかありません)
このアニメーションはかなりスローなので、再生速度をあげます。右上で [アニメーション] モードにしてから、右下の PunchingMontage をダブルクリックして、左下の Rate を 1.0 から 1.5 にします。
これでイベントの設定は終わりです。
[2] イベントの呼び出し側を組む
今作成したイベントを呼び出して使うブループリントを組みます。仮に下の画像の右端にある SET のすぐ後ろでイベントを呼び出してみます。
まず、スペースで右クリックして Punch を検索欄に入れて、[関数呼び出し] の下にある Punch をクリックします。(「関数」となっていますが、イベントは基本的に関数です。ただしイベントには関数にはない機能があります。たとえば、Delay ノードを使えるなど。)
つなげてみます。
これはどのような動作になるかというと、先のグラフ全体の画像の左上あたりにある [イベント Blueprint Update Animation] がアニメーションを更新するたびに、IsPunching? 変数に値がセットされて、そのまま Punch イベントが呼び出されるだけです。これに Branch ノードをはさめて、True であれば、Punch イベントが呼び出されることにできますが、それでも、更新のたびに True であれば Punch イベントが呼び出されるのでまずいです。したがって、改変します。まず、DoOnce を使います。
DoOnce の役割は、その名のとおり、何かを一度だけ実行させることにあります。[イベント Blueprint Update Animation] がいくら更新しても (いくらこの DoOnce を通過しても)、一度しか実行ピン右から実行信号が発信されません。
ただし、Reset 実行ピンに何かをつなげれば、その状態をリセットすることができます。つまり、まだ一度も実行されていない状態に戻すことができます。
なお、Start Closed はチェックを入れておきます。これは、実行の流れが閉じている (実行されていない状態) から始まるということを意味します。
次にその前に [ブランチ] ノードを配置します。そして、この [ブランチ] の Condition (条件) に IsPunching? 変数をつなげます。また、True 実行ピンから DoOnce の上実行ピンに、False 実行ピンから DoOnce の Reset 実行ピンに接続します。
ここでグラフの流れをざっと見てみましょう。
グラフの意味
このグラフ全体は、[イベント Blueprint Update Animation] ノードがアニメーションを更新すると必ず、実行パルスがワイヤを通って流れます。
ここで、ゲームのプレイヤーがマウスの左ボタンをクリックしたとします。するとその後のアニメーション更新で、そのことがキャッチされます。具体的には、MyCharacter のプロパティ (変数) である IsPunching? が True となっていることをこのアニメーション ブループリントが感知します。
その関数の中身 (値) は True (つまりパンチしている) なので、[ブランチ] の True 実行ピンに制御が流れて、[DoOnce] ノードが実行されます。
[DoOnce] は [Punch] (呼び出し) ノードを実行します (以下は、[Punch] イベントに制御が移ります)。これ以降は、いくら [DoOnce] を呼び出しても (IsPunching? が True であっても) [Punch] ノードは実行されません。(ただし、[Punc] イベント側では、アニメーションの再生をストップさせる機能がまだ備わっていないので、ずっと再生され続けます。)
ここで、プレイヤーがマウスの左ボタンをリリースすると、どうなるでしょうか?IsPunching? が False になり (パンチ状態ではなくなる)、[DoOnce] ノードの Reset 実行ピンに制御が渡り、[DoOnce] ノードの状態が、まだ一度も実行されていない状態にリセットされます。つまり、再びプレイヤーが左ボタンを押すと、また [DoOnce] ノードが実行されることになります。
[3] テストする
ここまでの準備で、いよいよテストしてみます。
左ボタンを押すと…しかし、大将はたたずむだけでした。
大切な設定がまだ抜けてました。以下、次回です。おつかれさまでした!