LoginSignup
1
4

More than 5 years have passed since last update.

ブレンド可能なアニメーション再生機能をブループリントで作ってみた

Posted at

やっとやり方を見つけることが出来たので、書きます。

やりたいこと

UE4 を使っていて、自分が欲しいと思ったアニメーション再生機能はこれです。

  • ブループリントや C++ で【Play】と命令すれば、アニメーションが再生される。
  • ループする/しないや再生スピード、ブレンド時間などは再生する時に決められる。
  • 再生対象となるのは、「アニメーションシーケンス」と「ブレンドスペース」
  • 同じアニメーションを再生し直すことが出来る。

今回は、この要望を満たすアニメーション再生機能を作りました。

アニムグラフを組む

まず、アニムグラフを以下のように組みます。
BlendAnimation.png

見ての通り、アニメーションシーケンスとブレンドスペースの再生情報をダブルバッファリングして、その情報を各アセットプレイヤーや 「Blend Poses By int」ノードに渡しています。

以下、補足です。

アニムグラフノードの入力データピン表示について

ご存知の方も多いと思いますが、アニムグラフノードのパラメータは入力データピンを表示させて外からパラメータを入力することが可能になっているものがあります。

例えば、「Animation Sequence Player」ノードでは、以下のように結構な数のパラメータがピン表示できるようになっています。
AnimSequencePlayer.png

このチェックを入れると、ノードに入力データピンが追加され、変数からデータを入力することが可能になります。

「Blend Poses By int」ノードの注意点

「Blend Poses By int」ノードはデフォルト挙動が 「Active Child Index」を変えても前の再生情報がリセットされない ようになっています。

例えば、「Active Child Index」を「0 -> 1 -> 0」と切り替えて再生するとします。もし、一回目の「0」でアニメーションを最後まで再生し終わってた場合、二回目の「0」ではその再生し終わった時間から再生が始まります。

なので、前に再生していたアニメーションの長さ次第で、二回目の「0」では アニメーションが再生されない、もしくはアニメーションが途中から再生される といった状態になってしまいます。

これを回避するためには、「Blend Poses By int」ノードの「 Reset Chiuld on Activation 」にチェックを入れる必要があります。
ResetChildOnActivation.png

ここにチェックを入れておけば、「Active Child Index」が変わるたびに再生情報がリセットされるようになります。

再生命令を発行する関数を組む

次に、アニメーション BP に再生命令を発行する関数を用意します。

【Play Anim Sequence】
PlayAnimSequence.png

【Play Blend Space】
PlayBlendSpace.png

見ての通り、データの書き込み先となるバッファのインデックスを切り替えてデータを書き込み、「Active Child Index」の値を更新するだけの関数となっています。(「IncrementIndex」ノードは自前で用意したノードで、加算した配列のインデックスを 0 ~ Length - 1 の間でループさせるためのノードです。)

「Active Child Index」の値は毎回切り替えているので、同じアニメーションを再生し直すことも可能です。

また、ブレンドスペースの場合は、後でブレンドスペースの軸の値を変更できるように別途関数を用意します。

【Set Blend Space Axis Value】
SetBlendSpaceAxisValue.png

あとはアニメーションを変更したい時にこれらの関数を呼べば、アニメーションが変更できるようになります。

最後に

これで自分の望むアニメーション再生関数を用意することが出来ました。

ただし、これは全てアニメーション BP に書かれているので、アニメーション BP が増えたら、それをそのままコピペするか、アニメーション BP を複製する必要があります。

流石にそれは面倒なので、次の記事では処理を C++ で組んで、アニメーション BP 依存にならないようにしてみます。

1
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
4