最近学习了Unity自定义编辑器窗口,下面简单总结,方便用到时回顾。

新建一个脚本:

using UnityEngine;
using System.Collections;
using UnityEditor; /// <summary>
/// 自定义的编辑器窗口
/// </summary>
public class MyWindow : EditorWindow { string myString = "Hello World !"; // 文本内容
bool groupEnabled; // 选项组是否可用
bool myBool = true; // 复选框状态
float myFloat = 2.33f; // 滑动条的值 [MenuItem("Extend Windows/MyWindow")]
public static void ShowWindow()
{
// 显示某个编辑器窗口。传参即是要显示的窗口类型(类名)
EditorWindow.GetWindow(typeof(MyWindow));
} void OnGUI()
{
// 文本
GUILayout.Label("Base Setting");
// 可以编辑,编辑后用同一个变量保存结果
myString = EditorGUILayout.TextField("这是文本", myString); // 开启一组选项
groupEnabled = EditorGUILayout.BeginToggleGroup("Options setting", groupEnabled);
// 复选框
myBool = EditorGUILayout.Toggle("这是复选框", myBool);
// 滑动条
EditorGUILayout.Slider("这是滑动条", myFloat, 0, 5);
// 结束这组选项
EditorGUILayout.EndToggleGroup();
}
}

写好脚本后保存,回到Unity等待完编译,即可看到以下效果:

Unity编辑器顶部的菜单栏多了一项Extend Windows。

点击弹出的窗体如下:

注意点:

  • 创建编辑器菜单项需要使用MenuItem特性。
  • 针对编辑器功能的代码,需要引入UnityEditor名称空间。
  • 自定义编辑器窗口类需要继承EditorWindow类。
  • 绘制窗口的代码需要写在OnGUI()函数里。
  • 绘制函数通常在GUILayout、EditorGUILayout这两个类中。
  • 绘制函数最后通常含有一个可选的参数GUILayoutOption[],这里暂未深入研究。
  • 重要:绘制函数会有返回值(即本次修改结果),这里在Start()函数里声明了变量用于记录返回结果,因为OnGUI()函数每帧都会被(可能多次)调用,所以应该每次都把上一次的返回结果作为这一次的默认值填入。否则当前的修改会在下一次OnGUI()中恢复为预设值,即修改无效!!!
  • 使用EditorGUILayout.BeginToggleGroup()开启一个选项组,
    对应EditorGUILayout.EndToggleGroup()结束一个选项组。
  • 最后,需要在菜单项静态函数中使用EditorWindow.GetWindow()才能实现点击该菜单项弹出一个编辑器窗口,参数是要弹出的编辑器窗口(即类名、类型)。
  • 这是编辑器功能(因为继承的是EditorWindow 类),所以写完脚本
    保存好后,回到Unity等待编译完即可看到效果,不需要将该脚本挂载在某个游戏物体上,也不需要点击游戏运行才能看到效果。

【Unity】自定义编辑器窗口——拓展编辑器功能的更多相关文章

  1. 拓展自定义编辑器窗口(EditorGUILayout类)

    Unity支持自行创建窗口,也支持自定义窗口布局.在Project视图中创建一个Editor文件夹,在文件夹中再创建一条脚本. 自定义窗口需要让脚本继承EditorWindow再设置MenuItem, ...

  2. 【Unity编辑器】UnityEditor多重弹出窗体与编辑器窗口层级管理

    一.简介 最近马三为公司开发了一款触发器编辑器,对于这个编辑器策划所要求的质量很高,是模仿暴雪的那个触发器编辑器来做的,而且之后这款编辑器要作为公司内部的一个通用工具链使用.其实,在这款触发器编辑器之 ...

  3. unity3d拓展编辑器MenuItem的使用

    MenuItem是自定义菜单栏显示 比如:[MenuItem("new/My Window")] 这样就会显示菜单new/My Window 把这个放在一个静态方法上就可以了.记住 ...

  4. 4. 在Inspector面板中显示类中变量+ 拓展编辑器

    1. C#脚本如下: using UnityEngine; using System.Collections; public class MyTest : MonoBehaviour { ; ; [S ...

  5. Unity3D研究院之在开始学习拓展编辑器

    Unity拥有非常丰富的拓展编辑器接口,如果是在网上下载过别人写的插件,你会发现为什么它的监测面板视图和普通的不一样?其实是他通过代码自己绘制的监测面板,这篇博文MOMO带大家来学习编辑器.如下图所示 ...

  6. unity3d拓展编辑器Editor的使用

    Editor可以拓展Inspector窗口 可以通过代码自己绘制监测面板 先来看一个效果:

  7. 【Unity】8.5 扩展编辑器

    分类:Unity.C#.VS2015 创建日期:2016-04-27 一.简介 可以通过编辑器窗口 (Editor Windows) 创建自己在 Unity 中的自定义设计工具.来自EditorWin ...

  8. 用mel编写自定义节点的属性编辑器界面

    用mel编写自定义节点的属性编辑器界面比较麻烦,而且网上例子又少,下面给出一个范例,说明基本的格式 // 初始化节点时调用 global proc initControl(string $attrNa ...

  9. eclipse 如何将文件编辑器窗口的背景填充为背景图片?

        1.情景展示 文件编辑窗口的背景默认为白色. 我们知道,对于整日面对电脑的程序员来说,白色容易造成眼疲劳,而且对于眼睛的伤害比较大. 所以,eclipse添加了黑色主题. 切换成黑色主题 改变 ...

随机推荐

  1. [javase学习笔记]-7.2 构造函数与一般函数的差别

    这一节我们简单学习一下构造函数与一般函数之间的差别所在. 那么它们有什么差别呢,结合上一节,我们能够总结出下面两点差别: 第一个差别: 构造函数:对象创建时,就会调用与之相应的构造函数,对对象进行初始 ...

  2. UnicodeDecodeError: 'utf-8' codec can't decode byte

    for line in open('u.item'): #read each line whenever I run this code it gives the following error: U ...

  3. java web项目中打开资源文件中文乱码

    1 java web项目中经常使用多模块管理.在某一个模块中添加了一些资源文件.但不是启动项目.有时候需要在程序中读取资源文件内容,打包后放到容器中就不能正常运行了.需要将所有资源文件放到启动项目的 ...

  4. android:ellipsize="end" 失效或者 相关的Bug

    其实这文章有点傻逼. 相关的问题 TextView android:ellipsize=“end”超出一个字符时不显示…的解决 http://www.pocketdigi.com/20140122/1 ...

  5. springboot + mybatis-pagehelper 参数查询不分页的bug。。。

    mmp,搞了很久 官方git上给出的配置是这样的: 这样做分页,如果仅仅支持一个查询,没问题,但是如果你带参数查询了,那就分页会出问题 把这行注释了即可 reasonable是指的让分页更加的合理化, ...

  6. 用Duplex实现消息广播

    WCF中定义3种消息交换模式: 1. Request/Reply; 2. One-Way; 3. Duplex.  Request/Reply 是缺省模式,即同步调用.在调用服务方法后需要等待服务的消 ...

  7. 【Unity】2.7 检视器(Inspector)

    分类:Unity.C#.VS2015 创建日期:2016-03-31 一.简介 Unity中的游戏是以包含网格.脚本.声音或灯光 (Lights) 等其他图形元素的多个游戏对象 (GameObject ...

  8. Spring、SpringMVC和Springboot的区别(网摘)

    spring boot就是一个大框架里面包含了许许多多的东西,其中spring就是最核心的内容之一,当然就包含spring mvc. spring mvc 是只是spring 处理web层请求的一个模 ...

  9. 在TypeScript中扩展JavaScript基础对象的功能

    最近工作中用到,记录一下:假设我们需要一个功能,把一个数字比如10000输出为下面的字符串格式“10,000”,一般是写一个方法,那么我希望更方便一点,直接向Number类型添加一个格式化方法,比如叫 ...

  10. npm WARN build `npm build` called with no arguments. Did you mean to `npm run-script build`?

    跑npm build结果如下: npm WARN build `npm build` called with no arguments. Did you mean to `npm run-script ...