终极目标
利用学到的东西制作自己的工具(自定义的窗口、Inspector、菜单、插件等等)。
最终效果
本系列其他文章
Unity Editor 基础篇(一):Build-In Attribute
Unity Editor 基础篇(二):自定义 Inspecotr 面板
Unity Editor 基础篇(三):Editor Window
准备工作
在之前的项目中,找到 Editor 文件夹,然后创建一个新的 C# 脚本,命名为“MyFirstWindow”,然后双击打开脚本,添加如下代码:
常用的自定义窗口属性
传送门:http://www.ceeger.com/Script/EditorWindow/EditorWindow.html
传送门:http://www.ceeger.com/Script/GUILayout/GUILayout.html
以上是我们这个案例中主要用到的几个类。
代码分析
属性
首先声明了三个变量:
1.bugReporterName 用于储存记录Bug人的名字
2.description 用于描述Bug信息
3.buggyGameObject 用于储存 Bug 对象
设置窗口的名字
如代码注释所示,利用构造函数来设置窗口的名字。比较陌生的是 titleContent属性 和 GUIContent 类,简单了解如下图所示:
GUIContent 界面内容类
titleContent 属性
这个构造函数所产生的作用如下图所示:
设置窗口的名字
添加菜单栏选项 - 打开窗口
这个函数用于在菜单栏上添加一个打开该窗口的的菜单选项。比较陌生的是 [MenuItem()] 属性 和 GetWindow()函数,简单了解如下图所示:
[MenuItem()] 属性需要注意的两点(上图也有提示):
1.必须是放在 Assets / Editor 文件夹下的类,且使用了 using UnityEditor
2.调用的函数必须是静态函数(static)
该函数就是用于返回一个窗口对象(就是打开一个窗口)。
绘制窗口
绘制窗口元素需要在 OnGUI() 函数里面设计,接下来我们一一分解。
步骤:
1.GUILayout.Space(10),这个有说过,让两个元素之间空十个像素之间的距离
2.GUI.skin.label.fontSize 、GUI.skin.label.alignment 用于设置标题的字体大小和对齐格式,具体从下图中了解:
对于 GUI.skin API 里面没有列出一些关于皮肤的属性,但是大伙们可以通过在Assets 菜单下右键 Create => GUI skin,如下图所示:
想对应的属性全在里面,克森就不一一讲解了。
3.利用 GUILayout.Label() 来绘制标题
整个代码的效果如下图所示:
绘制文本
好吧,似曾相识,在上一章中有讲过,因此不在赘述,效果如下所示:
显示当前正在编辑的场景
在这段代码中,比较陌生的也就是 EditorSceneManager.GetActiveScen().name,我们先看下图进行简单的了解:
其实就是返回当前编辑的场景信息(也就是返回 Scene 类型参数),然后利用 name 属性获取场景的名字,效果如下:
显示当前时间
这段代码主要就是利用 System.DateTime.Now 获取当前时间,然后通过 GUILayout.Label() 把当前时间显示出来,对于 System.DateTime.Now 可从下面链接去了解:
https://msdn.microsoft.com/zh-cn/library/system.datetime.now(v=vs.110).aspx
效果图如下:
绘制对象槽
我们先看看API:
从上图可知:
1.第一个参数用于设置卡槽的标题名字
2.第二个参数用于设置字段显示的物体
3.第三个参数用于设置显示的类型
4.第四个参数用于设置是否允许指定场景中的物件
效果如下:
绘制描述文本区域
好的,这段代码我们也介绍过了,直接上效果图:
绘制按钮
克森错了,这个应该在上一章就给大伙们介绍的,不过也没关系,那就再这一章中给大火介绍介绍呗,首先还是先看看 API 的介绍:
其实很简单,不外乎就是添加一个按钮呗。在我们的代码中,用了一个 if 判断语句来判断,当我们点击该按钮时所触发的事件(该函数的返回值是一个 bolol 类型),在代码中克森也上好备注了,因此也没有什么难的,直接上效果图:
SaveBug() 函数
其实这个函数所做的事情也很简单,就是把我们设置好的一些参数保存到一个文本文件(.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
具体操作如下所示:
然后你便能在 Assets 文件夹看到如下图所示信息:
SaveBugWithScreenshot() 函数
其实这个函数所做的事情跟上面那个函数做的事情一样一样的,不外乎就对了一行代码,而这行代码便是获得游戏屏幕截图,仅此而已,通过下面 API 去了解:
具体操作和上面一样一样的,只不过多了一样图片,仅此而已,如下图所示:
克森只是简单的介绍了一下,看完之后还得靠大伙们下点功夫从克森介绍的那些 API 中去研究研究,一个属性,一个属性的去试,去了解它,然后做出一个属于自己的插件!!
引用: https://mp.weixin.qq.com/s/tMSAIND4Pq0farn2jY8rwg