Unity--编辑器模式下预览动画


原理:


1.使用[ExecuteInEditMode]使得脚本在编辑器模式下可以执行到生命周期函数(Awake,OnDisable等等)


2.OnEnable时注册EditorApplication.update回调,OnDisable时反注册EditorApplication.update回调


3.使用Animator的Play函数切换动画,使用Animator的Update函数更新动画


以下脚本绑定在带有Animator组件的节点上,代码实现如下:

using UnityEditor;
using UnityEngine;

[ExecuteInEditMode]
//绑在带有Animator组件的节点上
public class AnimatorPreviewTest : MonoBehaviour
{
    private Animator animator = null;
    private float preTime = 0;//上一次运行的时间

    void Awake()
    {
        Debug.Log("AnimatorPreviewTest.Awake");
        animator = GetComponent();
        preTime = (float)EditorApplication.timeSinceStartup;
    }

    public void CustomUpdate()
    {
        Debug.Log("AnimatorPreviewTest.CustomUpdate");
        //计算delta
        var delta = (float)EditorApplication.timeSinceStartup - preTime;
        preTime = (float)EditorApplication.timeSinceStartup;
        //更新
        animator.Update(delta);
    }

    void OnDisable()
    {
        Debug.Log("AnimatorPreviewTest.OnDisable"); 
        UnResgisterUpdate();
    }

    void OnEnable()
    {
        Debug.Log("AnimatorPreviewTest.OnEnable");
        //切换到Run的状态
        animator.Play("Run");
        RegisterUpdate();
    }

    private void RegisterUpdate ()
    {
        EditorApplication.update += CustomUpdate;
    }

    private void UnResgisterUpdate ()
    {
        EditorApplication.update -= CustomUpdate;
    }
}

 

你可能感兴趣的:(Unity)