はじめに
この記事はHamster Output Advent Calendar 2024の15日目の記事です!
今回の記事は最近使い始めたAnimatorCrossFadeについて調べた内容です。
参考にしたリンク
何ができるか
Animatorのステートからステートへの遷移をスクリプトから行うことができます。画像だと矢印で繋がっている部分です。
結論
早い段階で結論を書いておくと、Animatorの遷移図がぐちゃぐちゃになる問題を解決することができます。Animatorの見にくさで困っている方はぜひ、使って見てください。
使い方
書き方は以下の通りです。
animator.CrossFade(ステート名, 遷移にかかる時間, レイヤー番号, アニメーションの開始位置,);
ソースコードにするとこんな感じになります。レイヤーとアニメーションの開始位置は入力しなくても利用できます。
public class Test : MonoBehaviour
{
[SerializeField]
private Animator _animator;
private void Update()
{
if (Input.GetKeyDown(KeyCode.Z))
{
_animator.CrossFade("Idle", 0.3f);
}
if (Input.GetKeyDown(KeyCode.X))
{
_animator.CrossFade("Walk", 0.3f);
}
}
}
実行して、ZやXを押してみるとAnimatorが切り変わります!
画像じゃあまり伝わらないけど滑らかにAnimationが切り替わっていることが分かる...
メリット
・AnimatorでAnimationの矢印を作成する手間が無くなる
・Animatorがぐちゃぐちゃにならない
・Animationを追加するだけで良い
普通にAnimatorで遷移図を作ると大体こうなると思いますが...
AnimatorCrossFadeを利用する場合、線を繋ぐ必要が無いのでAnimatorがスッキリします。
デメリット
・ステート名の入力が面倒
・Animatorのレイヤー内を総当たりして確認しているらしく、Animationが多ければ多い程負荷がかかる
ステート名の取得が面倒な部分はEditor経由で取得も可能です。良さそうな記事もありました。
FixedInTimeについて
CrossFadeともう一つ、CrossFadeInFixedTimeというものがあり、CrossFadeは正規化された時間でCrossFadeFixedInTimeは実際の時間という違いがあるらしいです。
※この違いはよく分かっていない...💦
まとめ
Animatorがとても綺麗になるので遷移図の見にくさで悩んでいる人は使ってみても良いかも...。
スクリプトから、制御できることから細かい調整もしやすいし。