终极目标

利用学到的东西制作自己的工具(自定义的窗口、Inspector、菜单、插件等等)。

 

最终效果

unity 自定义菜单和工具栏 unity 自定义编辑窗口_microsoft

本系列其他文章

 

Unity Editor 基础篇(一):Build-In Attribute

 

Unity Editor 基础篇(二):自定义 Inspecotr 面板

 

Unity Editor 基础篇(三):Editor Window

 

准备工作

在之前的项目中,找到 Editor 文件夹,然后创建一个新的 C# 脚本,命名为“MyFirstWindow”,然后双击打开脚本,添加如下代码:

 

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_自定义_02

unity 自定义菜单和工具栏 unity 自定义编辑窗口_自定义_03

unity 自定义菜单和工具栏 unity 自定义编辑窗口_microsoft_04

unity 自定义菜单和工具栏 unity 自定义编辑窗口_unity 自定义菜单和工具栏_05

 

常用的自定义窗口属性

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_unity 自定义菜单和工具栏_06

 

传送门:http://www.ceeger.com/Script/EditorWindow/EditorWindow.html

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_microsoft_07

unity 自定义菜单和工具栏 unity 自定义编辑窗口_API_08

 

传送门:http://www.ceeger.com/Script/GUILayout/GUILayout.html

 

以上是我们这个案例中主要用到的几个类。

 

 

代码分析

 

 

属性

unity 自定义菜单和工具栏 unity 自定义编辑窗口_unity 自定义菜单和工具栏_09

 

首先声明了三个变量:

 

    1.bugReporterName 用于储存记录Bug人的名字

    2.description 用于描述Bug信息

    3.buggyGameObject 用于储存 Bug 对象

 

设置窗口的名字

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_unity 自定义菜单和工具栏_09

 

如代码注释所示,利用构造函数来设置窗口的名字。比较陌生的是 titleContent属性 和 GUIContent 类,简单了解如下图所示:

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_自定义_11

GUIContent 界面内容类

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_microsoft_12

titleContent 属性

 

这个构造函数所产生的作用如下图所示:

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_API_13

设置窗口的名字

 

添加菜单栏选项 - 打开窗口

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_API_14

这个函数用于在菜单栏上添加一个打开该窗口的的菜单选项。比较陌生的是 [MenuItem()] 属性 和 GetWindow()函数,简单了解如下图所示:

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_API_15


[MenuItem()] 属性需要注意的两点(上图也有提示):

    1.必须是放在 Assets / Editor 文件夹下的类,且使用了 using UnityEditor

    2.调用的函数必须是静态函数(static)

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_unity 自定义菜单和工具栏_16

 

该函数就是用于返回一个窗口对象(就是打开一个窗口)。

 

 

绘制窗口

 

    绘制窗口元素需要在 OnGUI() 函数里面设计,接下来我们一一分解。

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_microsoft_17

步骤:

    1.GUILayout.Space(10),这个有说过,让两个元素之间空十个像素之间的距离

    2.GUI.skin.label.fontSize 、GUI.skin.label.alignment 用于设置标题的字体大小和对齐格式,具体从下图中了解:

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_unity 自定义菜单和工具栏_09

对于 GUI.skin API 里面没有列出一些关于皮肤的属性,但是大伙们可以通过在Assets 菜单下右键 Create => GUI skin,如下图所示:

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_unity 自定义菜单和工具栏_16

 

想对应的属性全在里面,克森就不一一讲解了。

 

    3.利用 GUILayout.Label() 来绘制标题

 

整个代码的效果如下图所示:

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_microsoft_20

 

绘制文本

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_unity 自定义菜单和工具栏_09

 

好吧,似曾相识,在上一章中有讲过,因此不在赘述,效果如下所示:

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_microsoft_22

 

显示当前正在编辑的场景

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_microsoft_23

 

在这段代码中,比较陌生的也就是 EditorSceneManager.GetActiveScen().name,我们先看下图进行简单的了解:

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_microsoft_24

 

其实就是返回当前编辑的场景信息(也就是返回 Scene 类型参数),然后利用 name 属性获取场景的名字,效果如下:

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_自定义_25

 

显示当前时间

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_unity 自定义菜单和工具栏_26

 

这段代码主要就是利用 System.DateTime.Now 获取当前时间,然后通过 GUILayout.Label() 把当前时间显示出来,对于 System.DateTime.Now 可从下面链接去了解:

 

https://msdn.microsoft.com/zh-cn/library/system.datetime.now(v=vs.110).aspx

 

效果图如下:

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_microsoft_20

 

 

绘制对象槽

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_unity 自定义菜单和工具栏_28

我们先看看API:

unity 自定义菜单和工具栏 unity 自定义编辑窗口_microsoft_29

 

从上图可知:

    1.第一个参数用于设置卡槽的标题名字

    2.第二个参数用于设置字段显示的物体

    3.第三个参数用于设置显示的类型

    4.第四个参数用于设置是否允许指定场景中的物件

 

效果如下:

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_自定义_30

 

 

绘制描述文本区域

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_自定义_31

 

好的,这段代码我们也介绍过了,直接上效果图:

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_自定义_32

 

 

绘制按钮

 

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_microsoft_33

unity 自定义菜单和工具栏 unity 自定义编辑窗口_microsoft_34

 

克森错了,这个应该在上一章就给大伙们介绍的,不过也没关系,那就再这一章中给大火介绍介绍呗,首先还是先看看 API 的介绍:

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_microsoft_20

 

其实很简单,不外乎就是添加一个按钮呗。在我们的代码中,用了一个 if 判断语句来判断,当我们点击该按钮时所触发的事件(该函数的返回值是一个 bolol 类型),在代码中克森也上好备注了,因此也没有什么难的,直接上效果图:

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_API_36

 

 

SaveBug() 函数

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_API_37

 

其实这个函数所做的事情也很简单,就是把我们设置好的一些参数保存到一个文本文件(.txt文件)上,仅此而已。

 

步骤如下:

    1.第一行,利用 Directory 类创建一个目录

    2.创建一个写入流类(StreamWriter)

    3.然后把设置好的各个参数写入文件中

 

还不了解 C# 文件操作的朋友,是时候返回去补补了,API 链接如下:

 

https://msdn.microsoft.com/zh-cn/library/system.io.directory(v=vs.110).aspx

https://msdn.microsoft.com/zh-cn/library/system.io.streamwriter(v=vs.110).aspx

 

具体操作如下所示:

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_unity 自定义菜单和工具栏_38

然后你便能在 Assets 文件夹看到如下图所示信息:

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_microsoft_39

SaveBugWithScreenshot() 函数

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_API_40

 

其实这个函数所做的事情跟上面那个函数做的事情一样一样的,不外乎就对了一行代码,而这行代码便是获得游戏屏幕截图,仅此而已,通过下面 API 去了解:

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_unity 自定义菜单和工具栏_41

 

具体操作和上面一样一样的,只不过多了一样图片,仅此而已,如下图所示:

 

unity 自定义菜单和工具栏 unity 自定义编辑窗口_unity 自定义菜单和工具栏_42

 

克森只是简单的介绍了一下,看完之后还得靠大伙们下点功夫从克森介绍的那些 API 中去研究研究,一个属性,一个属性的去试,去了解它,然后做出一个属于自己的插件!!