EditorWindow 和MenuItem

using UnityEngine;
using System.Collections;
using UnityEditor;
public class ClipEventEditor : EditorWindow
{
    /// <summary>
    /// MenuItem属性允许你添加菜单项到主菜单和检视面板上下文菜单
    /// MenuItem属性把任意静态函数变成为一个菜单命令。仅静态函数能使用这个MenuItem属性。
    /// 可以使用一下指定字符创建热键:% (Windows上为ctrl, OS X上为cmd), # (shift), & (alt), _ (无修改键)。
    /// 例如创建一个菜单热键为shift-alt-g使用GameObject/Do Something #&g。
    /// 创建一个菜单热键g并没有修改键(组合键),使用GameObject/Do Something _g。
    /// 热键文本必须在前面加一个空格字符(GameObject/Do_g不会被解释为热键,而是GameObject/Do _g这样,注意_g前面有空格)。
    /// 
    /// 注意:这是一个编辑器类,如果想使用它你需要把它放到工程目录下的Assets/Editor文件夹下。
    /// 编辑器类在UnityEditor命名空间下。所以当使用C#脚本时,你需要在脚本前面加上 "using UnityEditor"引用。
    /// </summary>
    [MenuItem("Tools/ClipEventEditor %1", false)]//快捷键Ctrl+1
    static void Show()
    {
        //static function GetWindow.<T> (utility : bool, title : string, focus : bool) : T
        //返回屏幕上类型T的当前的第一个编辑器窗口。
        //如果没有,创建并显示新的窗口并返回它的实例。
        //utility设置为真,来创建一个浮动窗口;为假,创建一个标准窗口。
        //title 如果GetWindow创建一个新的窗口,它将获取这个标题。如果这个值为null,使用类名作为标题。
        GetWindow<ClipEventEditor>(true, "编辑器");
    }
    public AnimationClip Clip;
    public GameObject Obj;
    void OnGUI()
    {
        GUILayout.Label("动画事件编辑器");

        //EditorGUILayout.ObjectField:制作一个物体字段。可以指定物体无论是通过拖拽物体或通过物体拾取器选择物体。
        Clip = (AnimationClip)EditorGUILayout.ObjectField(Clip, typeof(AnimationClip), true);
        Obj = (GameObject)EditorGUILayout.ObjectField(Obj, typeof(GameObject), true);

        if (Clip)
        {
            var Events = AnimationUtility.GetAnimationEvents(Clip);
            if (GUILayout.Button("显示隐藏事件"))
            {
                for (int i = 0; i < Events.Length; i++)
                {
                    if (float.IsInfinity(Events[i].time))
                    {
                        Events[i].time = 0;
                    }
                }

                //TODO ...保存修改
            }
        }
    }

}

 

posted @ 2015-10-10 19:42  martianzone  阅读(330)  评论(0编辑  收藏  举报