LoginSignup
7
6

More than 5 years have passed since last update.

【Unity】短いアニメーションからAnimator.CrossFadeでスムーズに遷移できない

Last updated at Posted at 2016-04-13

結論

スクリプトリファレンスちゃんと読め!
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は仕様が違った。
transitionDurationfadeLengthは違う!!

タイプ 引数 内容
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うお~って繋げてたりするのかな。
自分はただのアニメーション登録リストとしてしか使ってない!

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6