#結論
スクリプトリファレンスちゃんと読め!
http://docs.unity3d.com/jp/current/ScriptReference/Experimental.Director.IAnimatorControllerPlayable.CrossFade.html
http://docs.unity3d.com/ja/current/ScriptReference/Animation.CrossFade.html
#問題となった事象
Animator使用時に、ダメージやガードのような短いアニメーションからアイドリングへCrossFadeさせようとするとなぜか一瞬で遷移してしまう。
Animation(Legacy)のときはこれでキレイにいけたはずなのに何故じゃ。
anim.CrossFade("Idle", 0.3f);
#原因
Animator.CrossFadeのtransitionDurationとAnimation.CrossFadeのfadeLengthは仕様が違った。
transitionDurationとfadeLengthは違う!!
タイプ | 引数 | 内容 |
---|---|---|
Animator | transitionDuration | CurrentStateの正規化された時間 |
Animation | fadeLength | 実時間 |
#Animator.CrossFadeで実時間遷移する方法
簡単ですが、一応載せておきます。
float fadeLength = 0.3f; // 遷移させたい時間
float duration = fadeLength / anim.GetCurrentAnimatorStateInfo(0).length;
Animator.CrossFade("XXX", duration);
####追記
中の人に、CrossFadeInFixedTimeがあるよと教えていただきました。
http://docs.unity3d.com/ja/current/ScriptReference/Animator.CrossFadeInFixedTime.html
ちゃんとあったんですね、恥ずかしいですね。
#あとがき
Animatorがない頃からUnity使っている人がはまりそうだけど、そういう人はもうみんな知ってるよね。
スクリプトリファレンスちゃんと見ないとあかんよ!という自戒をこめて、初投稿。
いまだにAnimatorをしっかり使いこなしてない感ある。
みんなAnimatorControllerでtransitionうお~って繋げてたりするのかな。
自分はただのアニメーション登録リストとしてしか使ってない!