えんじにあ雑記!

開発していて学んだことをまとめていきます!

【Unity】Animation Clipからの値の更新を検知する

Animationによるコンポーネントの値の変更を検知する方法の紹介です

概要

UnityのAnimation機能を使ってコンポーネントの値を書き換えた際に即座に何か処理を行いたい(例えばViewに値を反映することでAnimation Previewを行えるようにしたいなど)場合の実現方法を紹介します。

MonoBehaviour.OnDidApplyAnimationProperties

MonoBehaviourにはOnDidApplyAnimationPropertiesというメソッドがあり、これはAnimationから値を更新した際に呼び出されます。 また、Animationを編集中に即座に反映したい場合にはExecuteInEditMode属性を付与する必要があります。

using UnityEngine;

[ExecuteInEditMode]

public class MovementController : MonoBehaviour
{
    [SerializeField]
    private float scale;

    void OnDidApplyAnimationProperties()
    {
        Debug.Log("OnDidApplyAnimationProperties is called!");
        transform.localScale = Vector3.one * scale;
    }
}

f:id:flat-M_M:20220225015254g:plain

完成👏