Unity编辑器 - 自动排版
Unity编辑器 - 自动排版
使用花括号提高可读性
//一组横向排列的控件
GUILayout.BeginHorizontal();
{
GUILayout.BeginVertical();
{
//横向排列中的第一组竖向控件
}
GUILayout.EndVertical();
GUILayout.BeginVertical();
{
//横向排列中的第二组竖向控件
}
GUILayout.EndVertical();
}
GUILayout.EndHorizontal();
1 一定要这样写的,不然改的痛不欲生。。
2 把冗长的代码按排版区域拆分成模块
坑爹的GUILayoutUtility.GetRect()和GUILayout.BeginArea()
在组织排版和需要实现交互操作时,需要获取控件的Rect,这时候使用GUILayoutUtility.GetRect()比较方便。
然而这里有两点要特别注意:
- 在Event.current.type == EventType.Layout时:
GUILayoutUtility.GetRect() = Rect(0, 0, 1, 1);
- GUILayoutUtility.GetRect()不能给BeginArea使用,因为GUILayout.BeginArea必须在Layout事件时传入正确的Rect,与GUILayoutUtility.GetRect()的结果有冲突:
private void OnGUI() {
Rect r1 = GUILayoutUtility.GetRect(300, 200);
LogRectTest(r1, "r1");
//GUILayout.BeginArea(r1, "错误用法", EditorStyles.helpBox); //错误用法, 区域大小会变成(0,0,1,1)!!!
GUILayout.BeginArea(new Rect(0, 0, 300, 50), "正确用法", EditorStyles.helpBox);//正确用法
{
Rect r2 = GUILayoutUtility.GetRect(GUIContent.none, EditorStyles.label);
var e = Event.current;
ctrlid = GUIUtility.GetControlID(FocusType.Passive);
switch (e.GetTypeForControl(ctrlid)) {
case EventType.MouseDown:
LogRectTest(r2, "r2");
break;
}
}
GUILayout.EndArea();
}
正确效果:
错误效果
小结
- 少用嵌套自动排版,手动计算区域
- 自适应窗口,按区域拆分模块,并且手动算每个区域的Rect
- 在已知区域内,使用BeginArea自动排版
例如:
private Rect listViewRect;
private Rect nameInfoRect;
private Rect EquipInfoRect;
private void OnGUI() {
ComputeRect();//计算区域
DrawListView(listViewRect);//在已知区域内自动排版
DrawNameInfo(nameInfoRect);
DrawEquipInfo(EquipInfoRect);
}
private void DrawEquipInfo(Rect equipInfoRect) {
GUILayout.BeginArea(equipInfoRect);
{
//GUILayout...
}
GUILayout.EndArea();
}
private void DrawNameInfo(Rect nameInfoRect) {
GUILayout.BeginArea(nameInfoRect);
{
//GUILayout...
}
GUILayout.EndArea();
}
private void DrawListView(Rect listViewRect) {
GUILayout.BeginArea(listViewRect);
{
//GUILayout...
}
GUILayout.EndArea();
}
private void ComputeRect() {
listViewRect = this.position;
listViewRect.position = Vector2.zero;
listViewRect.width = 150f;
nameInfoRect = this.position;
nameInfoRect.x += 150f + 1f;
nameInfoRect.width -= 150f + 1f;
nameInfoRect.height = 50f;
EquipInfoRect = nameInfoRect;
EquipInfoRect.y = nameInfoRect.height + 1f;
EquipInfoRect.height = this.position.height - nameInfoRect.height;
EquipInfoRect.width = this.position.width - 151f;
}
Unity编辑器 - 自动排版的更多相关文章
- Unity脚本自动添加注释脚本及排版格式
Unity脚本自动添加注释脚本及头部注释排版格式 公司开发项目,需要声明版权所有,,,,标注公司名,作者,时间,项目名称及描述等等. 自己总结实现的现成脚本及头部注释排版文本,添加到模版即可. 文件不 ...
- CKEditor扩展插件:自动排版功能
CKEditor是新一代的FCKeditor,是一个重新开发的版本.CKEditor是全球最优秀的网页在线文字编辑器之一,因其惊人的性能与可扩展性而广泛的被运用于各大网站. 如果还没接触过的可以看看, ...
- 【Unity优化】如何实现Unity编辑器中的协程
Unity编辑器中何时需要协程 当我们定制Unity编辑器的时候,往往需要启动额外的协程或者线程进行处理.比如当执行一些界面更新的时候,需要大量计算,如果用户在不断修正一个参数,比如从1变化到2,这种 ...
- 【Unity编辑器】UnityEditor多重弹出窗体与编辑器窗口层级管理
一.简介 最近马三为公司开发了一款触发器编辑器,对于这个编辑器策划所要求的质量很高,是模仿暴雪的那个触发器编辑器来做的,而且之后这款编辑器要作为公司内部的一个通用工具链使用.其实,在这款触发器编辑器之 ...
- Android Studio自动排版的两种方法
Android Studio这样的集成开发环境虽然代码自动化程度很高,但是自动化程度高导致人的自主性就下降了,而且总是依赖编辑器的功能也会搞得代码排版很别扭. 最难受的是你在Android Studi ...
- 【Unity】2.1 初识Unity编辑器
分类:Unity.C#.VS2015 创建日期:2016-03-26 一.简介 本节要点:了解Unity编辑器的菜单和视图界面,以及最基本的操作,这是入门的最基础部分,必须掌握. 二.启动界面 双击桌 ...
- 转载unity编辑器xml数据库插件
unity编辑器xml数据库插件 注:9月9日更新,其中MyXML.cs中有一句代码写错,查找功能失误,文中已经修改! 注:9月1日更新说明:xml存储结构,因为在用xml之前不知道正规的xml数据结 ...
- [Unity] 编辑器运行中动态编译执行C#代码
(一)问题 之前写Lua时,修改完代码 reload 就可以热重载代码,调试起来十分方便(重构则十分痛苦). 现在使用 C# 做开发,目前还没找到比较方便地进行热重载的方式.只能退而求其次,在调试上找 ...
- eclipse自动排版JSP问题
eclipse自动排版JSP非常难看,标签每行显示不完整,开发时很难受,下面设置一下这个就好多了: window-->preferences-->Web-->HTML Files-- ...
随机推荐
- 使用jQuery实现伪分页
在之前的项目中遇到一个这样的问题,页面分为上下两部分(分别称为未选中设备信息部分和选中设备信息部分),上面是从数据库拿出来的所有的设备信息,下面是显式已选中的设备信息,页面如下所示: 可以选中其中的任 ...
- PAT——年会抽奖(错位 排序)
题目描述 今年公司年会的奖品特别给力,但获奖的规矩却很奇葩: 1. 首先,所有人员都将一张写有自己名字的字条放入抽奖箱中:2. 待所有字条加入完毕,每人从箱中取一个字条:3. 如果抽到的字条上写的就是 ...
- GetSystemMetrics()函数的用法 转
转自 http://www.cnblogs.com/lidabo/archive/2012/07/10/2584725.html 可以用GetSystemMetrics函数可以获取系统分辨率,但这只是 ...
- 使用nuget 打包并上传 nuget.org
一. 准备工作 1 下载 Download NuGet.exe 2 windows 系统下设置环境变量 path中 或者 在dos 命令窗口下转到 nuget.exe 所在目录 3 在www.nu ...
- hadoop-1.2.1运行过程中遇到的问题
在hadoop-1.2.1中运行所遇到的问题: 2014-11-14 22:43:42 在服务器上运行hadoop-1.2.1中的datanode,出现了内存占用过大,导致ssh登陆出现如下问题 ...
- GoBelieve IM 服务端编译
#部署im1. 安装go编译环境参考链接:https://golang.org/doc/install 2. 下载im_service代码 cd $GOPATH/src/github.com/GoBe ...
- OC - ARC(自动引用计数)
1.什么是自动引用计数? 顾明思义,自动引用计数(ARC,Automatic Reference Counting)是指内存管理中对引用采取自动计数的技术. 在OC中采用ARC机制,让编译器来进行内存 ...
- 学习笔记 - Ford-Fulkerson & EK
Ford-Fulkerson & EK - 学习笔记 之前网络流什么的快忘完了 老师讲课的时候一脸懵逼--开始系统复习,从最大流开始 标签:网络流-最大流 『预备』 首先复习了网络流的概念-- ...
- Mybartis逆向工程
Mybartis逆向工程 0.创建工程项目,切记莫用中文,亲测在运行时报错 1.Pom文件,使用mybatis-generator插件 <?xml version="1.0" ...
- datatable去掉表头默认排序
禁用排序:"ordering":false 某一列禁用排序:"orderable":false 以某一列排序:"order":[[x,&qu ...