はじめに
どうも、皆さんおはこんばんにちは
Reonこと、れれっちです。
(NEW GAME!のプログラミング始めたてのねねっちからあだ名を考えました。)
このチームでは、私はAIプログラマとして貢献していくつもりです。
私はヨシゾウと違ってUnreal Engine4に関して初心者なので、基本的に記事の内容は初心者らしい話を書いていきたいと思います。
Anim Graph
今回は、基礎的な「アニメーション」について話したいと思います。
※感覚的に行っている部分があるので、間違っている所が有れば、差し支えない程度にコメントしてください。
アニメーションに関しては、ThirdPerson_AnimBP及び、*_AnimBPを編集します。
ThirdPerson_AnimBPには、Anim GraphとEvent Graphがありますが、Anim Graphは条件に応じてどのアニメーションを再生するかというもので、Event Graphはその条件を設定していくところと認識しています。
私が作っているAIの1つに Sword Enemy AI がありますが、基礎的なAnim Graphは以下のようにしました。

Idle/Runから様々な状態(Jump, Dash Atack, etc…)にトランザクションしていくわけですが、以下の二枚がそれぞれ「Idle/Run → Dash Attack」、「Dash Attack → Idle/Run」となっています。


そして、Dash Attack状態でのアニメーションは以下のようにPlay animationノードからFinal Animation Poseノードに繋げるのみです。

他の状態に関しても同様に条件を付けていき、再生したいアニメーションを設定していきます。今回、ヨシゾウが用意してくれたAttack_07を選びました。

Event Graph
上記したものがAnim Graphになっています。では、先程言ったようにAnim Graphの条件を設定するためにEvent Graphを編集していきます。
Sword Enemy AIのCharacterにCastした後に、Sword Enemy AIのCharacterで現在どういう状況になっているかを取ってきて、ThirdPerson_AnimBPのEvent Graphの変数に代入していきます。そうすることによって、Anim Graphで用いる変数が動的に変化してアニメーションが再生されるということになります。

しかし、これだけでは
「Idle/Run → Dash Attack」はできますが、
「Dash Attack → Idle/Run」はできない
ということになります。なぜなら、*_AnimBP側の変数が変更されたままであるからです。なので、次は「Dash Attack → Idle/Run」をするために、Anim Notifyというものを用いると良いと(私は)思います。
上記したAttack_07のアニメーションではAttack_07_endというAnim Notifyが設定されているのが確認できると思います。これは私が予め追加したものです。そうすることにより、*_AnimBPのEvent GraphでこのAnimNotifyイベントが呼び出せます。 私は、以下のようにAnimNotifyイベントを呼び出し変数のリセットをしました。

ここまでできれば、GraphのAnim Preview Editorで確認できます。
確認できました。
さいごに
考察
- 今回はAnimNotifyの使い方が変数のリセットに用いましたが、他にどのような使い方があるのか、考えてみます。
- AnimGraphにLocomotionと云うState Machineを用意しますが、State Machineが複数だった場合どのようになるか考えてみます。
- Unreal Engine4のアニメーションは奥が深く、Idle/RunのようなBlend Spaceを使うことでActionのトランザクションに違和感がなくなるはずなので、もう少し調べてみます。
感想
- Unreal Engine4のアニメーションの機能は豊富で、私も全然使いこなせていない状態なので、より違和感のないAIを作っていきたいと考えています。 最後まで読んでいただきありがとうございました。