I From Japan Staff Blog

I From Japan の開発者ブログです

Anim GraphとそのEvent Graphについて

はじめに

どうも、皆さんおはこんばんにちは

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は以下のようにしました。

f:id:rerecchi:20161001002958p:plain Anim Graph > Locomotion

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

f:id:rerecchi:20161001003013p:plain Idle/Run → Dash Attack


f:id:rerecchi:20161001003016p:plain Dash Attack → Idle/Run

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

f:id:rerecchi:20161001003358p:plain Play Animation > Final Animation Pose

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

gyazo.com Attack_07 Animation

Event Graph

上記したものがAnim Graphになっています。では、先程言ったようにAnim Graphの条件を設定するためにEvent Graphを編集していきます。

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

f:id:rerecchi:20161001003031p:plain  ThirdPerson_AnimBP's Event Graph(1)

しかし、これだけでは

「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イベントを呼び出し変数のリセットをしました。

f:id:rerecchi:20161001003444p:plain  ThirdPerson_AnimBP's Event Graph(2)

ここまでできれば、GraphのAnim Preview Editorで確認できます。

確認できました。

さいごに

考察

  • 今回はAnimNotifyの使い方が変数のリセットに用いましたが、他にどのような使い方があるのか、考えてみます。
  • AnimGraphにLocomotionと云うState Machineを用意しますが、State Machineが複数だった場合どのようになるか考えてみます。
  • Unreal Engine4のアニメーションは奥が深く、Idle/RunのようなBlend Spaceを使うことでActionのトランザクションに違和感がなくなるはずなので、もう少し調べてみます。

感想

  • Unreal Engine4のアニメーションの機能は豊富で、私も全然使いこなせていない状態なので、より違和感のないAIを作っていきたいと考えています。 最後まで読んでいただきありがとうございました。