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 ...保存修改 } } } }