以下の内容はhttps://bluebirdofoz.hatenablog.com/entry/2024/09/26/232946より取得しました。


Unityで同じアニメーションをもう一度再生する

本日は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メソッドを実行するとフェードアウトアニメーションがもう一度再生されました。




以上の内容はhttps://bluebirdofoz.hatenablog.com/entry/2024/09/26/232946より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14