编辑器扩展——自定义窗口
Unity 允许用户实现自定义窗口,以实现项目更加灵活且系统的配置。例如关卡编辑器、打包编辑器等等。它是能做出最多自定义功能的,但是实现过程其实也是比较固定的。总得来说自定义窗口最重要的部分其实是窗口内GUI得布局和方法,也就是说你要在窗口里做些什么。
窗口类型
默认窗口(可与其他窗口合并):适合做编辑器窗口。
弹窗 (PopUp):适合做窗口分层。
对焦弹窗(DropDown,失去焦点自动关闭):适合提示类窗口,比如插件介绍。
辅助窗口(AuxWindow):说是能够实现窗口重用,但是官网没有实例,不清楚具体是怎么实现重用的。
浮动窗口(UtilityWindow):所有不能被合并的窗口都叫浮动窗口
通知消息 (Notification):显示在窗口上,会自动淡出。可以调用RemoveNotification()将其手动关闭。
绘制
绘制自定义窗口最重要的是要实现OnGUI函数和一个可供MenuItem调用的静态方法(假设叫 Init 函数)。
OnGUI是自定义窗口类必须要实现的函数,其中实现具体布局和方法调用,决定窗口里看起来是怎么样的以及能实现什么功能。
Init函数其实是MenuItem的静态函数,用来相应MenuItem的点击,其中主要设置一些窗口的属性,比如大小、标题,位置等等。
重要API
EditorWindow:所有自定义窗口都要继承自它
GUI、EditorGUI、GUILayout、EditorGUILayout:都是用来绘制控件的
上述四种区别:前两种在绘制GUI的时候要传入Rect来确定位置,比较死板;后两种能够自动排版;有Editor字样的有针对于Editor相关的控件。
最最最重要的
就是工具方法。最根源的问题,你为什么要自定义窗口这才是最重要的。其他控件的绘制其实问题不大,最不济去翻API文档就能实现控件了。但如果工具方法写不出来,一切都白搭。
另外,要注意投入产出问题,做扩展的原始目的是提高效率,如果你完成的功能可以通过其他方式较快实现,那就没必要做扩展了。
反编译成熟插件的窗口扩展
要熟悉一项技能最重要的是自己动手实践,但是参看前人经验也同样重要。我们可以通过JetBrain的dotPeek对插件dll文件反编译成C#,这样就可以参照学习了。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
StringBuffer的解读(二)
StringBuffer的解读(二) StringBuffer默认容量大小是16个字符。 StringBuffer后面append NULL的测试,代码如下: public class Test { public static void main(String[] args) { StringBuffer sb = new StringBuffer("the"); System.out.println("sb is: " + sb);; String str = null; sb.append(str); System.out.println("sb is: " + sb);; } } StringBuffer后面append字符串+原先字符数组<容量的测试,代码如下: public class Test { public static void main(String[] args) { StringBuffer sb = new StringBuffer("the"); System.out.println("sb.length: " + sb.length()); Syst...
- 下一篇
unity C# 常用算法 和 算法复杂度
1、稳定性 归并排序、冒泡排序、插入排序。基数排序是稳定的 选择排序、快速排序、希尔排序、堆排序是不稳定的 2、时间复杂度 最基础的四个算法:冒泡、选择、插入、快排中,快排的时间复杂度最小O(n*log2n),其他都是O(n2) 3.排序算法的思想: (1)冒泡排序: 是相邻元素之间的比较和交换,两重循环O(n2);所以,如果两个相邻元素相等,是不会交换的。所以它是一种稳定的排序方法 public void PopSort(int[] list) { int i, j, temp; //先定义一下要用的变量 for (i = 0; i < list.Length - 1; i++) { for (j = i + 1; j < list.Length; j++) { if (list[i] > list[j]) //如果第二个小于第一个数 { //交换两个数的位置,在这里你也可以单独写一个交换方法,在此调用就行了 temp = list[i]; //把大的数放在一个临时存储位置 list[i] = list[j]; //然后把小的数赋给前一个,保证每趟排序前面的最小 l...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Mario游戏-低调大师作品
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8