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

}

时间: 2024-08-08 01:26:19

EditorWindow 和MenuItem的相关文章

列出场景对象Lightmap属性

首先上效果图: 编辑器代码: using UnityEngine; using UnityEditor; using System.Collections; public class LightmapAnalysisEditor : EditorWindow { private static EditorWindow window; [MenuItem("MyEditor/LightmapAnalysis &q")] private static void Execute()

The file &#39;MemoryStream&#39; is corrupted! 的解决办法

The file 'MemoryStream' is corrupted! Remove it and launch unity again! [Position out of bounds! 20 > 16] 有时候我们会遇到这个报错,然后整个U3D就崩溃了,原因是在于某些Prefabs的脚本引用丢失了,这个时候,只要把项目的所有丢失引用的Prefabs问题都解决了就OK了. 那么问题来了,有几万个Prefab也手动去解决吗,不!这里有个方便你检查丢失引用的脚本,用这个就可以检查出所有的丢失P

EditorWindow 编辑器窗口

EditorWindow是Unity中可以继承.用来扩展编辑窗口的类,通过继承EditorWindow类,可以制作一个自定义的编辑窗口.这通常包括以下几个步骤: 1.定义一个继承至EditorWindow的脚本: 2.通过MenuItem特性定义触发窗口的显示: 3.在OnGUI中定义窗口显示的内容. 1 using UnityEngine; 2 using System.Collections; 3 using UnityEditor; 4 5 public class UIGroupEdit

unity3d拓展编辑器MenuItem的使用

MenuItem是自定义菜单栏显示 比如:[MenuItem("new/My Window")] 这样就会显示菜单new/My Window 把这个放在一个静态方法上就可以了.记住.方法一定要是静态的. Unity圣典上的解释: 也就是说类必须继承:EditorWindow.EditorWindow在命名空间using UnityEditor;中 跟着Unity圣典上的列子和网上的列子敲了一次,这样才能深入理解 1 using UnityEngine; 2 using System.C

MenuItem命令

MenuItem属性可以把任意静态函数变成一个菜单命令,在Unity3D中仅静态函数能使用这个属性. 在创建菜单时,可以指定特定的字符来为菜单添加快捷键,如下所示: 字符%表示Windows上的ctrl键, OS X上的cmd键 字符#表示shift键 字符&表示alt键 字符_表示单键(非组合),例如_g,表示快捷键G. 下面的代码将创建一个XGUI/Main Menu的菜单项,并为菜单项添加一个Alt+Shift+1的快捷键. 1 [MenuItem("XGUI/Main Menu

Android MenuItem分享

import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.app.Activity; import android.content.Intent;

启动unity3d 提示“unity3d EditorWindow could not be loaded because the script is not found in the projec”

转载请注明出处:http://blog.csdn.net/u010019717 更全的内容请看我的游戏蛮牛地址:http://www.unitymanual.com/space-uid-18602.html 估计很少有人遇到这个问题,正常Mono中这个问题会直接提示出来. 主要是 脚本名和类名的不统一所致. 看一下正常启动的效果(EditorWindow): ?? 说一下错误出现的操作 脚本名为 DetectLeak .cs , 类名为:DetectLeaksWindow.默认让这个窗口打开着,

unity, editorWindow update计时

对于editorWindow,Time.deltaTime不起作用,所以需用下面方法对update进行计时: public class myEditorWindow : EditorWindow{ public float m_lastUpdateTime=0; public myEditorWindow(){        wantsMouseMove = true;    } public void Update(float dt){ //to do } private void Updat

unity插件开发——MenuItem

有unity中的菜单栏是我们经常使用到的地方,如下图: MenuItem的作用就是增加一个自己的菜单 使用方法: 在工程中Assets目录下任意一个Editor目录(以后简称Editor目录,如果不存在,请自行创建)中创建任意脚本,比如我创建了叫做MenuTest .cs,双击进入代码编辑,创建一个静态函数,(代码来自官方文档http://docs.unity3d.com/Documentation/ScriptReference/MenuItem.html)如下: public class M