BLOGブログ

2018.01.14UE4/Animation

[UE4] ステートのブレンド時間を変数を使って制御

こんにちは、新米えんじにゃーの遠藤です!

(この挨拶が社内社外共に不評ですが止め時が分からなくなったので使っていきます。)

 

今回はAnimation Blueprint(以下ABP)のState Machineの話です。

ABPのState Machineという機能でアニメーションの状態管理を単純化し制御することができます。

https://docs.unrealengine.com/latest/JPN/Engine/Animation/StateMachines/index.html

 

簡単にテスト用のState Machineを作成しました。

Third Personテンプレートのグレイマンの”Idle”モーションと”JumpLoop”モーションを切り替えるだけのものです。

遷移のルールには変数のフラグを切り替えるとモーションも切り替わるようにしてあります。

 

StateからStateに遷移する際にルールを決めることができ、StateからStateへのブレンド時間もその内の1つです。

リンク(丸いやつ)のDetailsのBlend Settings内のDurationという項目でブレンド時間を操作できます。

ブレンド時間を2秒にしてみました。StateからStateに遷移するのが遅くなっているのが分かるかと思います。

しかし、これではゲーム中にブレンド時間は常に固定になってしまい変えたい場合にStateを複数作ることになります。

なので変数を使ってブレンド時間を操作する方法を紹介します。

 

まず、Blend LogicをCustomに変更します。

 

Customの横にEdit Blend Graphというボタンが表示されるので押すと、新しいグラフが開かれます。

“Source State Pose”が遷移前のStateのアニメーションで”Destination State Pose”が遷移後のStateのアニメーションです。

このグラフでは2つのPoseをブレンドすることによって、遷移中のアニメーションを操作することができます。

 

“Get Transition Time Elapsed”というノードでStateからStateへの現在の遷移の経過時間を取得できます。

このノードを使い、変数を使ってブレンド時間を操作するグラフを作成しました。

BlendノードのAlphaは0~1の値なので、変数で経過時間をClampしています。

 

変数を使ってブレンド時間を制御することができました!

リンクごとにBlend Graphを作らないといけないのが手間ですが、変数で単純にブレンド時間を操作する以外でも遷移時に特殊なことをしたい場合など、Blend Graphは他にも使用用途がありそうです。是非活用してみてください~!