EditorWindow 和MenuItem

来源:互联网 发布:知乎 紫外线消毒 人体 编辑:程序博客网 时间:2024/05/19 19:43
转自:http://www.cnblogs.com/martianzone/p/4868116.html
复制代码
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 ...保存修改            }        }    }}
复制代码

 

0 0