はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】Animator.CrossFadeInFixedTimeを使ったアニメーションの遷移でtransitionに別れを告げる

はじめに

今回はAnimator.CrossFadeInFixedTimeを使ったアニメーションの遷移を実装する記事になります!

みなさん下のような3つの状態がある場合、IdleからSampleAnimation1SampleAnimation2に遷移をさせたいときどのように実装をするでしょうか。

f:id:hanaaaaaachiru:20190514182407p:plain

きっと多くの人がAnimatorControllerを使ってtransition(矢印)で繋げて、BoolTriggerを条件に付ける方法を思いつくと思います。

しかしそうすると矢印がそこらじゅうにあり、かつフラグがいっぱいという事態になることがよくあります。

その解決策として、Animator.CrossFadeInFixedTimeを使うことでtransitionを繋ぐことなく状態遷移することができます

というわけで実際にみていきましょう!

Animator.CrossFadeInFixedTimeとは

Unityの公式リファレンスではこのように説明されています。

秒単位の時間を使用して、現在の状態から他の状態へのクロスフェードを作成します。

Animator-CrossFadeInFixedTime - Unity スクリプトリファレンス

つまり指定した時間をかけて他のアニメーションに遷移することができるということです。

オプション引数は基本いじらないと思うので、必要最低限のメソッドは以下の通りです。

public void CrossFadeInFixedTime (string stateName、float fixedTransitionDuration)
引数名 意味
stateName ステートの名前
fixedTransitionDuration 状態を遷移するのにかかる時間(秒)

下準備

今回実装するにあたって以下のアニメーションを用意しました。

Idle

f:id:hanaaaaaachiru:20190514182747p:plain

SampleAnimation1

f:id:hanaaaaaachiru:20190512143108g:plain

SampleAnimation2

f:id:hanaaaaaachiru:20190514182957g:plain

これをIdle -> SampleAnimatioin1 -> SampleAnimation2という遷移を行いたいと思います。
Animationのループはfalseにしとおいてください

実装

さきほどのAnimator.CrossFadeInFixedTimeを用いて実装してみます。

using System.Collections;
using UnityEngine;

public class TransitionTest : MonoBehaviour
{
    [SerializeField] private Animator _animator;

    private IEnumerator Start()
    {
        //0.5秒待つ
        yield return new WaitForSeconds(0.5f);

        //Idle -> SampleAnimation1 に遷移
        _animator.CrossFadeInFixedTime("SampleAnimation1", 0);

        //1秒待つ
        yield return new WaitForSeconds(1);

        //SampleAnimation1 -> SampleAnimation2 に遷移
        _animator.CrossFadeInFixedTime("SampleAnimation2", 0);

    }
}

このスクリプトをゲームオブジェクトにアタッチして、Animatorの参照を付けた後に実行してみると・・・。

f:id:hanaaaaaachiru:20190514184511g:plain

より使いやすくする

ここはある程度Unityの知識が必要かもしれませんが、アニメーション遷移とStateパターンはかなり親和性が高いと思います。

ここに書くと記事が長くなってしまうので書きませんが、以下の記事のように実装してみるとかなり使い勝手がよくなるはずです。

www.hanachiru-blog.com

さいごに

私はちまちま矢印を繋いだりフラグ管理したりするのが嫌いなので、この方法の方がかなり好きです。
もし同じように感じる方がいれば、一度試してみてはどうでしょうか!