本日はUnityの小ネタ枠です。
Unityで同じアニメーションをもう一度再生する方法についてです。
同じアニメーションをもう一度再生する
UnityのAnimatorは通常ステートを遷移することで再生されます。
今回は以下のような遷移できないステートや現在のステートを遷移せずにもう一度再生する方法です。

Animator.Playメソッドでは任意のステートの再生位置を変更できます。
本メソッドで再生位置を 0 (開始点)にすることでアニメーションをもう一度再生することができます。
docs.unity3d.com
var animator = GetComponent<Animator>(); var layerIndex = 0; // アニメーションを最初(normalizedTime:0)から再生することで // 遷移することなくアニメーションを再び再生する animator.Play("FadeoutAnimation", layerIndex, 0);
サンプルスクリプト
アニメーションを参照して現在のステートをもう一度再生する以下のサンプルスクリプトを作成しました。
・FadeoutAnimatorController.cs
using UnityEngine; public class FadeoutAnimatorController : MonoBehaviour { [SerializeField] private Animator animator; void Reset() { animator = GetComponent<Animator>(); } [ContextMenu("ReplayFadeoutByHash")] public void ReplayFadeoutByHash() { int layerIndex = 0; // 現在のアニメーションのステートを参照してステートのハッシュ値を取得する // 文字列のステート名は取得できないため、スクリプトから現在のステートを指定する場合はハッシュ値を利用する var stateInfo = animator.GetCurrentAnimatorStateInfo(layerIndex); var stateNameHash = stateInfo.shortNameHash; // アニメーションを最初(normalizedTime:0)から再生することで // 遷移することなくアニメーションを再び再生する // ステートの指定にはハッシュ値も利用できる animator.Play(stateNameHash, layerIndex, 0); } }

シーンを再生して動作を確認します。
一度アニメーションが再生された後、コンテキストメニューからReplayFadeoutByHashメソッドを実行するとフェードアウトアニメーションがもう一度再生されました。

