今回はアニメーションブループリントを使ってUE4のアニメーションステートを組む方法を解説したいと思います。
UE4の簡単なアニメーションシステムについては少し前に解説しましたので、そちらをどうぞ。
UE4の簡単なアニメーションシステム解説 - Let's Enjoy Unreal Engine
またブループリントの解説も前回行なっているので、そちらも参考に。
UE4 ブループリント超入門編 - Let's Enjoy Unreal Engine
アニメーションブループリントの作成方法
まずはアニメーションブループリントの作成をやってみましょう。Content BrowserからNewを押して、Animation→Animation Blueprintを選択します。
この時に親となる"Parent Class"の設定がでてきます。アニメーションブループリントを扱うには親が"AnimInstance"である必要があります。ここでは特に何も指定しなくても自動で"AnimInstance"になるのでそのままにしておきます。
もうひとつの"Target Skeleton"はしっかりと指定する必要があります。ここでターゲットになるスケルトンをしっかりと指定しましょう。
出来上がったらとりあえず名前は適当になにかつけておきます。それでは作ったアニメーションブループリントのファイルをダブルクリックしましょう。
こんな画面になっていればOKです。
ステートマシンを作る
ではここからアニメーションステートを作っていきましょう。
アニメーショングラフの上で右クリックを押して、"State Machines"をクリックし、"Add New State Machine"を選択します。
名前はとりあえず"Default"とでもしておきましょう。出来上がったステートマシンノードを"Final Animation Pose"ノードと繋いでしまいましょう。
ひとまずこれでOKです。ではDefaultノードをダブルクリックして中へ入ります。
中にはEntryと書かれたノードがひとつだけあるはずです。これはアニメーションステートのエントリーポイント、つまり開始地点です。ここからステートを作って繋げていきます。
ではまず"Idle"ステートを作りましょう。ステートの作り方はいつも通り右クリックから"Add State"を選択します。そしてステートができたらそのままEntryとIdleノードを繋げてしまいましょう。
ではその中に入っていきましょう。Idleをダブルクリックします。
中には"Final Animation Pose"があると思います。Idleの中でアニメーションを指定するために、すぐ下の方にある"Asset Browser"を開きます。ここには既に登録されているアニメーション一覧がありますので、ここからアイドルアニメーションをドラッグ&ドロップで引っ張り、それをFinal Animation Poseと繋ぎましょう。完了したら、一度左上のCompileとSaveをしておきます。
これでIdleステートが出来上がりました。
アニメーションブループリントとキャラクターの関連付け
キャラクターを既に作っていればそのキャラクタークラスの中を開いて、"Defaults"タブを選択後に"Animation"という項目を探します。その中にある"Anim Blueprint Generated Class"というところクリックして、自分が作ったアニメーションブループリントを指定します。
これでキャラクターとアニメーションの関連付けができました。この段階でキャラクターをレベル内に配置してPlayボタンを押すと既にキャラクターがアイドルアニメーションをしているはずです。
ステート切り替えて別のアニメーションへ
当然ステートマシンですからステート切り替えができます。
今回は簡単なステート切り替えを説明するために時間が5秒たつとジャンプするというステートを作りたいと思います。ステートを作るためにまずは"Event Graph"を編集する必要があります。アニメーションブループリントタブ上部にある"Event Graph"を選択してください。
開始イベントをまずは作ります。右クリックして"Event Blueprint Update Animation"というものを検索し、ノードを作成してください。これが毎フレーム呼びだされるイベントです。ここからは簡単なブループリントの編集です。詳細は最初に紹介したブループリント超入門編でも解説しているので、そちらを参考にしてください。
このブループリントで5秒後にIs Jumping変数がTrueになります。
これが完了したらDefalutタブに戻ってください。そして"Add State"で"Jump"を追加します。追加後、IdleとJumpを繋いでおきます。
ここでIdleとJumpの間にある丸と両方向に向かう矢印のアイコンに注目してください。これはステートが移行するための条件を書くための場所です。ちなみにステートは必ず矢印を伸ばした方向にしか移行しないということを覚えておいてください。
このアイコンをダブルクリックしてください。中にひとつだけノードがあるのでここにさっき作ったブループリントの中にある変数"Is Jumping"を条件にしてノードを繋ぎます。
これでIs JumpingがTrueになればJumpステートに移行します。あとはJumpステートの中をダブルクリックしてIdleステートと同じようにAsset BrowserからジャンプアニメーションをResultで渡してあげると、IdleがJumpに切り替わった瞬間にジャンプするようになります!
実際に動かすと5秒後にジャンプアニメーションを行うようになっているはずです!
ステートマシンの使い方
アニメーションのステートマシンはこのように使うことができるのがわかりました。最終結果さえ渡すことができれば自由にステートは定義できます。移動とジャンプと着地のステートを別々に作ってそれぞれがループするステートにしたい場合はこんな感じになります。
自由にステート組んでEvent Graphで値や条件の管理をすればどんな状況でも作ることができるはずです。もちろんブループリントとして使えるので、自分が作ったクラスなどと連携させるといったことも可能です。
その応用方法は無限だと思いますので、自分の楽な方法でアニメーションステート管理をしてみてください。