UE4.16で追加されたアニメーション新機能に"アニメーションモディファイア(Animation Modifier)"というものがあります。
ただこれ、パッと見てもぜんぜん利点も使い方もわからないですよね…私も全然わかりませんでした。というわけでちゃんと触ってみましたが、しっかり使い方を理解すれば相当便利な機能であるとわかりました。
今回はそれをしっかり解説したいと思いますので、続きをどうぞ。
Animation Modifierブループリントを作成する
アニメーションモディファイアはアニメーションの新機能ですが、必ずブループリントクラスの作成が必要となります。まずはブループリントクラスを作成します。
新規作成で"すべてのクラス"から"AnimationModifier"を選択して名前を自由につけてください。
これでブループリントが作成されます。
作成を行うと2つのイベントを必ず追加する必要があります。
"Event On Apply"と"Event On Revert"の2つです。
これらのイベントはゲーム中にけして呼び出されることはありません。つまり開発用に用意された専用イベントです。
この2つのイベントはアニメーションシーケンスのアセットなどを開いた際に"アニメーションモディファイア"タブから呼び出すことが可能となります。まずは適当なアニメーションシーケンスなどを開いてください。
もし"アニメーションモディファイア"タブがなければ上部メニューから"ウィンドウ"を選択し、"アニメーションデータモディファイア"タブを開いてあげてください。
これでアニメーションモディファイアを使う準備が整いました。
モディファイアを追加する
次にモディファイアを追加します。
必ず自分が追加したアニメーションモディファイアを選択してください。追加を行うと、モディファイアの名前の横に"(Out of Date)"という文字列が表示されています。
これはまだモディファイアを適用していないという状態です。
ここで右クリックを選択すると様々な選択が表示されます。ここからブループリントを開くことも可能です。
"Apply Modifires"を選択すると、ブループリント上で"Event On Apply"のイベントが実行されます。"Revert Modifires"を選択すると、"Event On Revert"のイベントが実行されます。
最後の"Remove Modifires"を選択することでモディファイア自体を削除することが可能です。モディファイアは複数追加が可能なので、"すべてのモディファイアを適用"のボタンを押すことで追加された全てのモディファイアを実行することも可能です。
これでアニメーションモディファイアの基本的な使い方はOKです。実際にアニメーションモディファイアを使ってアニメーション情報を追加してみましょう。
カーブ情報をアニメーションシーケンスに追加する
それではブループリントを少し作成して、アニメーションモディファイアからカーブ情報を生成してみましょう。
このようなノードを作りました。
"Event On Apply"を呼び出した後に"Add Curve"でカーブを追加します。その後に"Add Float Curve Keys"でキーを一気に追加します。"Add Curve Name"という変数にはカーブ名を入れておきます。
ちなみに変数は"インスタンス編集可能"にチェックを入れておくと、"アニメーションモディファイア"のタブ上から変数情報を編集することが可能です。意外と見落としがちなので覚えておいてください。
これで配列情報を渡すことにより、一気にカーブにキーを追加します。
これは追加前。
そして追加後。
ブループリント上から設定されたものでカーブ情報が自動的に生成されました。
もちろんこの程度ではほとんど効果がありませんが、"Animation Blueprint Library"にあるノードを使うともっともっと様々なことが可能です。
では次はトラックに通知イベントを追加してみましょう。
通知イベントをアニメーションシーケンスに追加する
基本的には先程と同じです。"Event On Apply"から必要なノードを作成していきます。
今回も非常に単純なノードを組みました。
"Add Animation Notify Track"でトラックを追加し、"Add Animation Notify Event"で通知イベントを追加します。
実際に実行して適用します。
トラック上に通知イベントが追加されました。これでこのまま利用することが可能です。
ただしこのノードで追加できるのは"Anim Notify State"のみのようです。"Add Animation Notify Event Object"というノードがあり、こちらは通常の"Anim Notify"の追加が可能だと思われますが、現状Classでの選択が不可能で、どのように適用するのかわかりませんでした。
おそらくまだ実験的な機能なので、この辺りの機能整理はまだこれからといった印象です。ただこれでも十分に使うことが可能です。
非常に期待できる新機能
まだまだ謎が多いアニメーションモディファイアですが、ゲームのアセット量産体勢に入った時に大活躍する可能性が高く、最初の動画でもあったようにキャラクターのボーンの動きに合わせて自動的にイベントやマーカーやカーブが追加できます。
また今回は使用していませんが、"Event On Revert"を使うと不要な情報を削除したりするといったことも可能で、アニメーション情報を整理したい時などにも活用できます。
おそらく"Event On Revert"では、"Event On Apply"の結果を完全に戻す必要があります。
上手く活用して便利に使いましょう!
追記 On ApplyとOn Revertが呼ばれるケース
"Event On Apply"と"Event On Revert"が呼ばれるケースについて指摘があったので、再度呼びだされるケースについてを検証しました。
結果的には以下のような図になります。
Event On Apply | Event On Revert | |
Apply Modifiers | ○ | ○ |
Revert Modifiers | × | ○ |
Remove Modifiers | × | ○ |
上記結果からどのケースにおいても"Event On Revert"は呼ばれていることを確認しました。
また"Apply Modifiers"においては"Event On Revert"が呼ばれた後に"Event On Apply"が呼び出されています。つまり一度結果を戻してから適用を行うようです。
"Revert Modifiers"は結果を戻してそのままにしますが、"Remove Modifiers"は結果を戻した後にモディファイア自体を削除してしまう点に違いがあります。
この結果から言えることは、"Event On Apply"には結果を適用することに変わりはありませんが、"Event On Revert"ではその結果を戻すように処理を組む必要があるということです。
この辺りに注意してアニメーションモディファイアを使っていきましょう。