【Unity開発】Animator Controllerの遷移設定(Duration等)【ひよこエッセンス】
Unity5.1.1f1 Personal(2015年6月)
ひよこエッセンスの時間です〜
今回はAnimator Controllerの記事の続きです〜遷移時の細かな設定を中心に見ていきます〜
Animator Controllerの遷移設定(Duration等)
前回記事でIdleからWalkへ遷移するアニメーションを作成することができましたが、下の赤枠部分の解説を丸々飛ばしてしまいましたので、今回解説していきたいと思います〜
Settings周辺の解説をします
まずはHas Exit Timeです〜
Has Exit Timeのチェックが外れている時はConditionsにてアニメーション遷移条件を決め、チェックが付いている時はアニメーション再生回数を決め、それが終了したらアニメーション遷移します〜
続いてExit Timeです〜
Has Exit Timeにチェックが付いている場合、ここでアニメーションを実行する回数を決めます〜
3に設定するとStateを3回実行したらアニメーション遷移、0.5に設定するとStateを半分実行してアニメーション遷移、といった具合です〜
続いてFixed Durationです〜
Durationは存続時間を表し、Unityではアニメーションが切り替わるのに要する時間を意味します〜
Duration時間内で徐々に遷移後アニメーションの度合いを強くしていくことで、スムーズなアニメーションを実現します〜
そのDuration時間を、遷移前アニメーションの長さを元に%で算出するか、秒を元に算出するか決めるのがFixed Durationです〜
Fixed Durationにチェックが入っていない場合、遷移前Stateのアニメーション1回分の長さを元にDurationを決定します〜単位は%です〜
Transition Durationを1にした場合、遷移前Stateの1回分長さをかけて徐々に遷移後アニメーションへ移行します〜
Idle1回分の長さをかけて徐々にWalkへ移行
Transition Durationを0.5にした場合、遷移前のStateの1単位分の長さの半分の時間をかけて遷移後アニメーションへ移行します〜
Idleの半分の長さでWalkに移行
Transition Durationを0にした場合、アニメーション遷移の瞬間にキッパリとアニメーションを切り替えます〜2Dアニメーションの場合は徐々に移行ができないので、Transition Durationを0にします〜
アニメーション遷移のタイミングで即座に移行
FixedDurationにチェックが入っている場合、遷移前Stateの長さとは独立してDurationの長さを決定する、すなわち秒を使ってDuration時間を決めていきます〜
Transition Durationを1にすれば1秒かけて徐々に遷移後アニメーションへ移行します〜
1秒でアニメーション遷移
Transition Durationを0.5にすれば0.5秒かけて遷移後アニメーションへ移行します〜
0.5秒でアニメーション遷移
Transition Durationを0にすれば、アニメーション遷移の瞬間にキッパリとアニメーションを切り替えます〜
キッパリとアニメーション遷移
続いてTransition Offsetです〜
Offsetは差分の埋め合わせを表し、Unityだとアニメーションの開始位置をズラす感じの意味で使われています〜
例えばWalkアニメーションが左→右→左→右という順番で足を動かしている場合、Transition Offsetを0.5に設定すると、右→左→右→左という順番で足を動かすようになります〜
Transition Offset=0 Walkは先頭から再生される
Transition Offset=0.5 Walkは真ん中から再生される
続いてInterruption Sourceです〜
ここではアニメーションの中断が設定できます〜
Noneは、中断されません〜
Current Stateは、現在のアニメーション再生時に中断されます〜
Next State: 遷移先アニメーション再生時に中断されます〜
Current State Then Next StateとNext State Then Current Stateは、現在もしくは遷移先アニメーション再生時に中断されます〜
Ordered Interruptionは、トランジションの順番とは独立して中断することができるそうですが、よく意味が分かっていません〜
Interruption関係についてはこのIdleとWalkを行き来するアニメーションでうまくいったのは、Current Stateを選択し、尚且つORdered Interruptionのチェックを外した時だけでした〜もう少し調査したいと思います〜
続いてPreview source stateです〜こちらは、プレビュー画面でどのStateを表示するかを決められます〜
ゲーム再生時にのみ設定できます〜
Idleを選択 下のプレビュー画面にIdle状態のユニティちゃんを表示
最後にCan Transition To Selfです〜こちらはTriggerを使ったほうが効果が分かりやすいので、Jumpアニメーションを追加します〜
Any State→Jump→Exitを作成
Jumpトリガー作成
JumpStateの設定 JUMP00を指定
Any State→JumpのTransition設定
Jump→ExitのTransition設定
スペースキーを押した時にジャンプするように、UnityChanScriptを加筆していきます〜
using UnityEngine; using System.Collections; public class UnityChanScript : MonoBehaviour { private Animator anim; void Start () { anim = GetComponent<Animator>(); } void Update () { if (Input.GetKey ("up")) { anim.SetBool ("Walk", true); } else { anim.SetBool ("Walk", false); } //********** 開始 **********// if (Input.GetKeyDown ("space")) { anim.SetTrigger("Jump"); } //********** 終了 **********// } }
UnityChanScript.cs
ジャンプ!
それでは話をCan Transition To Selfに戻しましょう〜
Can Transition To Selfは、今回のようにAny StateからTriggerを使ってアニメーション遷移をする時などに影響します〜
まずはCan Transition To Selfがオフである場合です〜
この場合2回連続で同じTriggerが実行すると、1回目のアニメーションが終了するまで、2回目のTriggerはtrueのまま待機状態となります〜
つまり1回目のアニメーションが終了した時にはじめて2回目のTriggerがtrueからfalseとなり、2回目のアニメーションが実行されます〜
続いてCan Transition To Selfがオンの時ですが、こちらの場合は1回目の遷移先のアニメーションが終了する前でも2回目のTriggerが実行されます〜
つまり1回目のアニメーションは強制的に中断され、2回目のアニメーションが実行されます〜
ひと通りアニメーション遷移時の設定について解説しましたが、まだ分からないところが多いので追記していくと思います〜
以上、ひよこエッセンスでした〜
ありがとうございました〜