Extending the Editor

Unity允许你使用自己定制的inspectors和Editor Windows扩展编辑器,并且你可以使用定制的Property Drawers定义属性集在inspector中如何展示,这一块讲述如何使用这些特性。

Editor Windows

你可以在你的app中创建任意数量的定制窗口。它们的表现就像Inspector,Scene或者其它内置的窗口。这是给你的游戏添加一个子系统用户接口的绝佳方式。[比如地图编辑器]

做一个自定义的Editor Window包含以下几个简单步骤:

1.创建脚本,继承EditorWindow类

2.使用代码去触发窗口显示自己

3.为你的工具实现GUI代码

Derive From EditorWindow

为了制作你的Editor Window,你的脚本必须存放在一个叫做"Editor"的文件夹中。在这个脚本中创建一个类,它继承自EditorWindow.然后在内部的OnGUI方法里面编写你的GUI控制。

using UnityEngine;
using UnityEditor;
using System.Collections; public class Example:EditorWindow
{
void onGUI()
{
// The actual window code goes here
}
}

Showing the window

为了在屏幕上显示窗口,制作一个menu item来显示它,这个靠创建一个方法完成,而激活这个方法则是靠MenuItem属性。

Unity的默认行为是循环利用窗口(即:再次选择menu item会显示已经存在的窗口。这是靠使用EditorWindow.GetWindow方法实现),例如:

using UnityEngine;
using UnityEditor;
using System.Collections; class MyWindow : EditorWindow {
[MenuItem ("Window/My Window")] public static void ShowWindow () {
EditorWindow.GetWindow(typeof(MyWindow));
} void OnGUI () {
// The actual window code goes here
}
}

这会创造一个标准的,可停靠的编辑窗口,它会在指令之间保存它的位置,可以使用自定义的布局,等等。想要获得更多的操控,你可以使用GetWindowWithRect.

Implementing Your Window's GUI

窗口中实际的内容靠实现OnGUI方法绘制。你在游戏内部GUI中使用的UnityGUI类(GUI和GUILayout)在这里也可以使用。此外我们提供了一些额外的GUI操作,它们在editor-only类里面:EditorGUI和EditorGUILayout。这些类添加在了普通类已经可用的控件集合里,所以你可以随意的混合搭配使用它们。

下面的C#代码展示了你如何添加GUI元素到自定义的EditorWindow中:

using UnityEditor;
using UnityEngine; public class MyWindow : EditorWindow
{
string myString = "Hello World";
bool groupEnabled;
bool myBool = true;
float myFloat = 1.23f; // Add menu item named "My Window" to the Window menu
[MenuItem("Window/My Window")]
public static void ShowWindow()
{
//Show existing window instance. If one doesn't exist, make one.
EditorWindow.GetWindow(typeof(MyWindow));
} void OnGUI()
{
GUILayout.Label ("Base Settings", EditorStyles.boldLabel);
myString = EditorGUILayout.TextField ("Text Field", myString); groupEnabled = EditorGUILayout.BeginToggleGroup ("Optional Settings", groupEnabled);
myBool = EditorGUILayout.Toggle ("Toggle", myBool);
myFloat = EditorGUILayout.Slider ("Slider", myFloat, -, );
EditorGUILayout.EndToggleGroup ();
}
}

样例代码的执行结果如下图:

还想获得更多信息,可以看看在EditorWindow页面的样例和文档

Unity扩展编辑器--类型1:Editor Windows的更多相关文章

  1. Unity扩展编辑器--类型3:Custom Editors

    Custom Editors 加速游戏制作过程的关键是为哪些频繁使用的组件创建自定义的编辑器,为了举例,我们将会使用下面这个极其简单的脚本进行讲解,它的作用是始终保持一个对象注视某一点. public ...

  2. Unity 扩展编辑器

    扩展Inspector界面 继承自Editor,添加CustomEditorAttribute,传入定制的类型 定制显示的类型要求: 类型中所有的public 字段都会自动暴露给Inspector编辑 ...

  3. Unity扩展编辑器学习笔记--从路径下找到拥有某个组件类型的预设

    public static List<T> GetAssetsWithScript<T>(string path) where T:MonoBehaviour { T tmp; ...

  4. Unity扩展编辑器一

    将Test1脚本挂在摄像机上 ​ 如图展示 ​ 下面我们需要在代码中动态的编辑它,请在你的Project视图中创建一个Editor文件夹,把MyEditor放进Editor文件夹中 ​ 在OnInsp ...

  5. Unity扩展编辑器四

    Inspector视图中的get/set使用 get  set使用起来很方便,但编辑时,在Inspector视图中问题就来了,因为get/set的属性即使是public了,但是在Inspector视图 ...

  6. Unity扩展编辑器三

    Scene视图是编辑游戏模型的地方,其实它还可以进行编辑,如下图所示,我给Scene视图做了简单的编辑 Scene视图的扩展是基于对象的,意思是你必须在Hierarchy视图中选择一个对象才行,Hie ...

  7. Unity扩展编辑器二

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

  8. Unity扩展编辑器五

    扩展系统自带组件Inspector ​ 可以在系统摄像机组建上添加一个按钮,这样就可以单独处理逻辑了 ​

  9. 【Unity】8.5 扩展编辑器

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

随机推荐

  1. RAM——[HAOI2007]理想的正方形

    题目:[HAOI2007]理想的正方形 描述: [问题描述] 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值的差最小. [输入]: 第一行为3个 ...

  2. 《A First Course in Probability》-chaper5-连续型随机变量-均匀随机变量

    在连续随机变量这部分,有一种特殊的随机变量X,对于X所有可能取值,P(X)都相等,我们称其为均匀随机变量. 基于均匀随机变量的定义,我们容易看到,其密度函数f(x)必然是一条平行于x轴的直线,因为这样 ...

  3. hdoj 1513 Palindrome【LCS+滚动数组】

    Palindrome Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total ...

  4. SpringMVC在上传文件的时候提示The current request is not a multipart request错误

    @RequestMapping("/insertOrder") @ResponseBody public  Object insertOrder(String userId,Htt ...

  5. 输入一个整形数组,数组里有正数也有负数。数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)

    群里看到这道题,用python做了做, def find(array): v_sum = greatest = 0 for a in array: v_sum += a v_sum = 0 if v_ ...

  6. Zlib文件压缩和解压

    开源代码:http://www.zlib.net/zlib使用手册:http://www.zlib.net/manual.htmlzlib wince版:http://www.tenik.co.jp/ ...

  7. staticMetaObject

    staticMetaObject : QObject 及其 子类 的静态属性成员. 定义如下: const QMetaObject staticMetaObject; QMetaObject 记录了 ...

  8. IntPtr与自定义结构互转

    //IntPtr转自定义结构 struct onlydata { IntPtr hwnd; }; onlydata pd=new onlydata(); IntPtr pd; pd=Marshal.P ...

  9. Reso | Noise 网易云音乐插件

    源码地址:https://github.com/Simpleyyt/noise-neteasemusic安装方法:sudo add-apt-repository ppa:simpleyyt/ppasu ...

  10. [转] linux下的c/c++调试器gdb

    PS:1. 断点C++类函数,用b 命名空间::类名::方法名 2. 编译参数一定要加-g,才可断点调试 http://www.cnblogs.com/xd502djj/archive/2012/08 ...