ビデオの内容紹介
前回作成したステートマシンには値を供給しなければなりませんでした。そこで今回は、キャラクターの動きを判定して速度の変数に値を入れるまでをアニメーション ブループリントの EventGraph で組んで行きます。
原題 Introduction to Third Person Blueprint game – 11 – Animation Blueprint EventGraph
まず、Character AnimBP (キャラクター アニメーション ブループリント) をダブルクリックして開きます。
Event Graph を開きます。
スペースを右クリックして、検索欄に update などと入れて、イベント Blueprint Update Animation を出します。
この イベント Blueprint Update Animation の右側の実行ピンにつながるものが、毎フレーム (=ゲームのフレームが更新されるたびに) 実行されることになります。
これに IsValid をつなげます。IsValid の Input には、Try Get Pawn Owner の Return Value (返り値) をつなげます。
Try Get Pawn Owner は、このアニメーションの主人公 (キャラクターというオブジェクト) を取得します。その Return Value は、そのオブジェクトへの参照を返します。それが、IsValid につながれているので、そのオブジェクトが有効 (Valid) なものかどうかを判定しています (そのオブジェクトが使用できるかどうかを判定しています)。
補足 「アニメーションのためのブループリント」と「アクタ (たとえば、キャラクター) のためのブループリント」があるとします。「アニメーションのためのブループリント」から「アクタのためのブループリント」にアクセスするために、この Try Get Pawn Owner を使うことができます。
IsValid の Is Valid 実行ピンは、そのオブジェクトが有効な場合に実行されるピンです。
その後どのようなノードがつながれるか、完成図をご覧ください。
IsValid の Is Valid 実行ピンには、SET IsInAir?がつながれています。つまり IsInAir? という変数に値をセットする (代入する) ことになります。
IsInAir? は、(キャラクターが)「空中にいるか否か」の情報が入る bool 型でした。空中にいると判定した場合は true を、そうでない場合は false を返します (=false という値を渡します)。
問題は、どこで「空中にいるか否か」を判断するかということです。これは、アクタの Movement Componentが担当します。このコンポーネントは、アクタがどのようなアクションを取っているかを判断するところです。
そこで、Get Movement Component として、その情報への参照を取得して、さらに IsFalling (落ちているか?) 関数で「空中にいるか否か」を判定しています。
そして、この Get Movement Component 自体は、あるアクタ (ポーン、この場合キャラクター) の Movement Component を取得するので、Try Get Pawn Owner につながっています。
(ということは、これからアクタ (この場合キャラクター) のためのブループリントを作成する必要があるということになります。それが次回の課題です。)
また、後々走るアニメーションを再生するために、キャラクターの移動速度を取得しなければなりません。前回作成したIdle_Walk_Run のノードの Speed に入る値です。
そのためには、Get Velocity (速度を取得する) 関数を配置し、Try Get Pawn Owner の Return Value (つまり、キャラクターへの参照) をターゲットにします (キャラクターの速度を取得したいのでこのようにします)。
さらに Get Velocity 関数を Vector Length (ベクタの長さを取得する) 関数につなげています。この関数については、Paper 2D 入門 (7) キャラクター ブループリント 3 (基本的なアニメーション操作) で解説されていますので、ここでは簡単に述べると、動きを矢印として見た場合、そのスピードは矢印の大きさ (長さ) で表されるということになります。
この値を、SET で変数 Speed にセットしています。これは、IsInAir? 変数のセットの後につながっています。順番的に、IsInAir? に値を入れ終わってから、Speed に値を入れることになります。
今回はここまでとなります。お疲れ様でした!
コメント
とても参考になります。
一つ教えていただきたいのですが完成図で”Is Falling”から
“Is in Air”に繋がっていますが、”Is Falling”はそのままの
意味ですと落下中と思います。
落下中が真ならばInInAirに真がセットされるのは理解できるのですが
ジャンプで上昇中はどうなるのでしょうか?
焼きおにぎり様
サイトを見てくださって、ありがとうございます!
さて、IsFalling 関数の件ですが、IsFalling 関数は、キャラクターが空中にいるかどうかで、true、false を返します。ですから、ジャンプで上昇中も true を返します。名称がちょっとあれですかね。