【Unity】自定义编辑器窗口——拓展编辑器功能
最近学习了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】自定义编辑器窗口——拓展编辑器功能的更多相关文章
- 拓展自定义编辑器窗口(EditorGUILayout类)
Unity支持自行创建窗口,也支持自定义窗口布局.在Project视图中创建一个Editor文件夹,在文件夹中再创建一条脚本. 自定义窗口需要让脚本继承EditorWindow再设置MenuItem, ...
- 【Unity编辑器】UnityEditor多重弹出窗体与编辑器窗口层级管理
一.简介 最近马三为公司开发了一款触发器编辑器,对于这个编辑器策划所要求的质量很高,是模仿暴雪的那个触发器编辑器来做的,而且之后这款编辑器要作为公司内部的一个通用工具链使用.其实,在这款触发器编辑器之 ...
- unity3d拓展编辑器MenuItem的使用
MenuItem是自定义菜单栏显示 比如:[MenuItem("new/My Window")] 这样就会显示菜单new/My Window 把这个放在一个静态方法上就可以了.记住 ...
- 4. 在Inspector面板中显示类中变量+ 拓展编辑器
1. C#脚本如下: using UnityEngine; using System.Collections; public class MyTest : MonoBehaviour { ; ; [S ...
- Unity3D研究院之在开始学习拓展编辑器
Unity拥有非常丰富的拓展编辑器接口,如果是在网上下载过别人写的插件,你会发现为什么它的监测面板视图和普通的不一样?其实是他通过代码自己绘制的监测面板,这篇博文MOMO带大家来学习编辑器.如下图所示 ...
- unity3d拓展编辑器Editor的使用
Editor可以拓展Inspector窗口 可以通过代码自己绘制监测面板 先来看一个效果:
- 【Unity】8.5 扩展编辑器
分类:Unity.C#.VS2015 创建日期:2016-04-27 一.简介 可以通过编辑器窗口 (Editor Windows) 创建自己在 Unity 中的自定义设计工具.来自EditorWin ...
- 用mel编写自定义节点的属性编辑器界面
用mel编写自定义节点的属性编辑器界面比较麻烦,而且网上例子又少,下面给出一个范例,说明基本的格式 // 初始化节点时调用 global proc initControl(string $attrNa ...
- eclipse 如何将文件编辑器窗口的背景填充为背景图片?
1.情景展示 文件编辑窗口的背景默认为白色. 我们知道,对于整日面对电脑的程序员来说,白色容易造成眼疲劳,而且对于眼睛的伤害比较大. 所以,eclipse添加了黑色主题. 切换成黑色主题 改变 ...
随机推荐
- js中文乱码问题,编码设为utf-8,但还是乱码问题。
dw中编辑js的时候使用另存为菜单,在存储的时候勾选上一个叫[包括Unicode签名(BOM)(S)]的选项,然后存储.再次在浏览器源码中查看的时候js的中文就正常显示了,查看属性,编码也是UTF-8 ...
- Android View之布局加载流程
1.引言 最近准备重新学习下Android,加深理解,快速形成自己的知识结构体系.最先学习的就算View部分,从自定义View到Activty层次结构,到layout加载过程.等等都会看一遍,在此记录 ...
- 还没被玩坏的robobrowser(6)——follow_link
背景 在做spider的时候,我们经常会有点击链接的需求. 考虑这样的一个简单spider:获取qq.com主页上的今日话题中的内容. 一般思路是先去qq.com首页上找到今日话题的链接,然后点击这个 ...
- 浅谈cocos2dx(18) 中工厂模式
----我的生活.我的点点滴滴! ! cocos2d-x中也有工厂模式.何为工厂模式,顾名思义就是用来产生产品的,工厂就是用来创建其它类对象的类,我们把这个创建其它类对象的类叫做工厂类.而这些被创建的 ...
- 转:zTree树控件入门之checkbox:如何动态设置节点的checkbox选择框启用与禁用状态(chkDisabled)
当一棵树的部分节点根据登入用户角色不同而决定是否启用节点前的checkbox选择框的时候,我们应该如何做呢?也或者如何在页面加载的时候动态根据当前登入用户角色动态切换节点前的checkbox的禁用状态 ...
- windows 64位下,React-Native环境搭建详解 (Android)
React-Native环境搭建需要: 1.安装Java JDK 2.安装Android Studio 3.安装node.js 4.安装git 5.安装Python 2.x (注意目前不支持Pytho ...
- linux分享一:网络设置
在Linux中,TCP/IP网络的配置信息存在几个不同的文件里面,这些文件分别就是 /etc/sysconfig/network. 网卡配置文件. /etc/hostc. /ect/resolv.co ...
- Android 常用算法
排序算法 简单排序算法 冒泡排序 两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止 直接插入排序 通过 n-i 次关键字间的比较,从 n-i+1 个记录中选出关键字最小的记录,并和第 ...
- ubuntu java 环境配置
下载oracle java sudo add-apt-repository ppa:webupd8team/java -y sudo apt-get update sudo apt-get insta ...
- C++类中的成员函数和构造函数为模板函数时的调用方法
所谓模板函数其实就是建立一个通用函数,这个通用函数的形参类型不具体指定,用一个虚拟类型来代表,这个通用函数就被称为函数模板. 例: #include <iostream> using na ...