欢迎光临散文网 会员登陆 & 注册

【Unity技巧2】简单的动画预览工具

2022-08-06 16:13 作者:机智的小草yns  | 我要投稿

前言:当有比较多动画片段需要预览时,需要找到原本的动画文件预览比较麻烦。为了方便预览较多的动画,就做了这个工具。

使用展示


打开位置:顶部菜单栏的Tools/EditorAnimDisplayWindow

使用:把角色模型拽上去,就会自动显示动画机内的所有动画。

其次是下面的输入框可以做搜索筛选

源码:

using UnityEditor;
using UnityEngine;

namespace Assets.Editor
{
    public class EditorAnimDisplay : EditorWindow
    {
        #region init
        private static EditorAnimDisplay instance;
        [MenuItem("Tools/EditorAnimDisplayWindow")]
        static void PrefabWrapTool()
        {
            //获取当前窗口实例
            instance = EditorWindow.GetWindow<EditorAnimDisplay>();
            instance.Show();
            //ShowUtility() 实体窗口样式
        }
        #endregion

        public AnimationClip[] clips;
        public GameObject player;
        public string Fitter = "";

        private AnimationClip curAnimClip;
        private float Timer = 0;
        private int playCount = 0;
        private Vector2 pos = Vector2.zero;


        void OnGUI()
        {
            player = EditorGUILayout.ObjectField("player", player, typeof(GameObject), true) as GameObject;
            Fitter= EditorGUILayout.TextField("NameFitter",Fitter );
            if (player)
            {
                clips = player.GetComponent<Animator>().runtimeAnimatorController.animationClips;
                pos = GUILayout.BeginScrollView(pos, false, false);
                foreach (var item in clips)
                {

                    if (IsShow(item.name)&&GUILayout.Button(item.name))
                    {
                        PlayAnim(item);
                    }
                }
                GUILayout.EndScrollView();
            }
        }

        private bool IsShow(string clipName)
        {
            if (Fitter=="")
                return true;
            else
            {
                return clipName.ToLower().Contains(Fitter.ToLower());
            }         
        }

        private void PlayAnim(AnimationClip clip)
        {
            Timer = 0;
            playCount = 0;
            curAnimClip = clip;
            Selection.activeObject = clip;
            //DragAndDrop.objectReferences[0] = clip;
            //Debug.Log("yns  play");
        }

        private void Update()
        {
                UpdateAnim(Time.deltaTime);
        }

        private void UpdateAnim(float delta)
        {
            if (curAnimClip != null)
            {
                Timer += delta;
                if (Timer > curAnimClip.length && playCount <2)
                {
                    playCount++;
                    Timer = 0;
                }
                else
                {

                    //动画执行方法

                    curAnimClip.SampleAnimation(player, Timer);
                }
            }
        }
    }
}



【Unity技巧2】简单的动画预览工具的评论 (共 条)

分享到微博请遵守国家法律