サードパーソン ブループリント ゲーム入門 (18) アニメーション ブループリント パンチのセットアップ
ビデオの内容紹介
アニメーション ブループリントで、モンタージュを再生するための準備を行います。今回はまず、マウス操作により発生するパンチについて、その情報をアニメーション ブループリントに渡します (キャラクターがパンチを行っているか否かという情報を渡します)。
原題 Introduction to Third Person Blueprint game – 18 – Animation Blueprint Punching Setup in UE4
[1] プロジェクト設定で入力をセットアップする
マウスの左ボタンを押すと、キャラクターがパンチできるようにするために、次のように設定を追加します。
まず、メインエディタの[編集] → [プロジェクト設定] → [エンジン] → [入力] を開いて、[Action Mapping] の横の + ボタンをクリックします。
Punch と入力します。
Punch を展開して、
[左マウスボタン] を選択します。
次のようになります。
[2] キャラクターのブループリントでパンチの情報を保存する
キャラクターのブループリントで、キャラクターが今パンチをしているのかしていないのか、といった情報を得て変数に保存することにします。(そうすることによって、他のブループリントでも使えるようにします。)
まず、Character フォルダの My Character ブループリントを開きます。
以前作ったものが見えますね。
スペースで右クリックして Punch などと検索すると、早速、Punch イベントが表示されるようになっています。
これを選択します。
次に、IsPunching? (パンチしているか?) という変数を作成します。[変数] をクリックして、型 (変数タイプ) を Boolean にします。
この IsPunching? 変数をドラッグアンドドロップします。
[設定] を選択します。
これを 2 つ作って (コピーすると楽)、それぞれ Pressed (マウスの左ボタンが押されている) と Released (マウスの左ボタンが放された) の実行ピンとつなげます。Pressed の方につなげる Set IsPunching? の方は、true (その通り) をセットしたいので、チェックを入れます。反対に、Released の方はチェックを外したままにします。
これによって、マウスの左ボタンを押した時には、IsPunching? に true という値が入り、放している (放した) 時には false (そうではない) が入る (セットされる) ことになります。
最後に、目のマークをクリックし、コンパイルすることによって、他のブループリントからも参照できるようにします。
[3] アニメーション ブループリントでパンチの情報を受け止める
キャラクター ブループリントで変数に入れた情報を、アニメーション ブループリントで引っ張って使えるようにします。
まず、Character フォルダの Character AnimBP を開きます。
ここで IsPunching? という同名の変数を作ります。(ただし、先に作ってある IsPunching? とは別のものです。このあたり若干ややこしいのですが、たとえるなら、先に作った IsPunching? は隣の家のテレビで、今回作った IsPunching? はうちのテレビで、互いに影響を受けず無関係であり、別のものが映っていると考えてください。)
作ったばかりの変数をドラッグアンドドロップします。[設定] を選択して、Set IsPunching? にします。
次にこの「うちの」IsPunching? に「隣の家の」 IsPunching? の値を入れることにします。正式に言えば、Character AnimBP の IsPunching? に、MyCharacter ブループリントの IsPunching? に入っている値を入れます。(これがこの節の目標でした。)
しかし、そのままでは「隣の家の」 IsPunching? を勝手に使うことは許されていません。ブループリント (「家」) が異なれば、勝手にその「家」のものが使えないという感じです。それなりの段取りが必要なのです。
そのためには、まず「隣の家」への道 (参照) を取得します。それが TryGetPawnOwner (ポーンオーナーを取得しようとする) です。これは、このアニメーションを所有 (own) しているポーン (つまりキャラクター) への参照 (メモリ上のどこにあるか) を取得するためのものです。(その参照はすでに何回か取得していますが、今回また取得します。)
その参照が得られたら、次に、その「家」の財産である IsPunching? を使用する許可をもらいます。これが [My Character にキャストする] という関数です。
ただし、この [MyCharacter にキャストする] を出すためには少し気を付けなければなりません。(今回はエンジンを日本語表記にしているために若干苦労しています。)
まず、TryGetPawnOwner の Return Value (返り値) からワイヤーを引き出し、リリースすると次のようなメニューが表示されます。
そこで [ユーティリティ] → [キャスティング] → [MyCharacter にキャストする] を選択します。Cast to と検索しても出てきませんので要注意です。または、次のように MyCharacter で検索すると出てきます。
さて、これで材料がそろったので、次のようにつなげます。
(赤い○の部分は、ワイヤーが交錯して分かりづらくなるのを防ぐために、Add Reroute Node を使っています。)
TryGetPawnOwner の Return Value が [MyCharacter にキャストする] に供給されているのが分かります。この時点で、MyCharacter の財産を使ってもよいことになります。だから、次のように、[MyCharacter にキャストする] の AsMyCharacter (MyCharacter として) からMyCharacter の IsPunching? の設定 (Set) を使うことができるようになります。
なお、AsMyCharacter からワイヤーを引っ張り出して、メニューから IsPunching? を出すには、[文脈依存] にチェックを入れた状態で ispuくらいを検索欄にタイプするとよいです。
先の画像に戻って、この Get IsPunching? (MyCharacter の変数) を Set IsPunching? (アニメーション ブループリントの変数) につなげると、前者の値が後者に入れられることになります。これが今回の目標でした。
次回は、これに少し追加します。お疲れさまでした。