本日は Unity の技術調査枠です。
基本変形(移動・回転・スケール)のアニメーションを作成する方法についてまとめます。
今回はアニメーションの終了を検知する方法です。
前回記事
以下の記事の続きになります。
bluebirdofoz.hatenablog.com
アニメーションの終了を検知する
前回作成した[Loop Time]を無効化したアニメーションコントローラを利用します。
アニメーションの終了を検知するには normalizedTime を利用します。
normalizedTime は 0 から始まり、アニメーションの再生がすべて完了すると 1 になります。
State が変わらないままアニメーションがループする場合は 1 から更に加算されていきます。
docs.unity3d.com
スクリプトを修正してアニメーションを再生したときにその状態をログ出力するようにしました。
・AnimationKicker.cs
using UnityEngine; [RequireComponent(typeof(Animator))] public class KickTrigger : MonoBehaviour { /// <summary> /// Animatorコンポーネント /// </summary> [SerializeField] private Animator animator; /// <summary> /// 待機状態ID /// </summary> int waitSateHash = Animator.StringToHash("Base Layer.WaitState"); /// <summary> /// 参照の設定 /// </summary> void Reset () { // Animatorコンポーネントの取得 animator = GetComponent<Animator>(); } /// <summary> /// 定期実行 /// </summary> void Update() { // Zキー押下で実行する if (Input.GetKey(KeyCode.Z)) { // トリガーを実行する animator.SetTrigger("AnimTrigger"); } if (animator.GetCurrentAnimatorStateInfo(0).fullPathHash != waitSateHash) { if (animator.GetCurrentAnimatorStateInfo(0).normalizedTime < 1.0f) { Debug.Log("アニメーション再生中"); } else { Debug.Log("アニメーション終了"); } } } }
動作確認
シーンを再生してZキーを押下し、アニメーションを開始します。
以下の通りアニメーション再生中と終了のタイミングでログが切り替わりました。