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编辑器 - 自动排版的更多相关文章

  1. Unity脚本自动添加注释脚本及排版格式

    Unity脚本自动添加注释脚本及头部注释排版格式 公司开发项目,需要声明版权所有,,,,标注公司名,作者,时间,项目名称及描述等等. 自己总结实现的现成脚本及头部注释排版文本,添加到模版即可. 文件不 ...

  2. CKEditor扩展插件:自动排版功能

    CKEditor是新一代的FCKeditor,是一个重新开发的版本.CKEditor是全球最优秀的网页在线文字编辑器之一,因其惊人的性能与可扩展性而广泛的被运用于各大网站. 如果还没接触过的可以看看, ...

  3. 【Unity优化】如何实现Unity编辑器中的协程

    Unity编辑器中何时需要协程 当我们定制Unity编辑器的时候,往往需要启动额外的协程或者线程进行处理.比如当执行一些界面更新的时候,需要大量计算,如果用户在不断修正一个参数,比如从1变化到2,这种 ...

  4. 【Unity编辑器】UnityEditor多重弹出窗体与编辑器窗口层级管理

    一.简介 最近马三为公司开发了一款触发器编辑器,对于这个编辑器策划所要求的质量很高,是模仿暴雪的那个触发器编辑器来做的,而且之后这款编辑器要作为公司内部的一个通用工具链使用.其实,在这款触发器编辑器之 ...

  5. Android Studio自动排版的两种方法

    Android Studio这样的集成开发环境虽然代码自动化程度很高,但是自动化程度高导致人的自主性就下降了,而且总是依赖编辑器的功能也会搞得代码排版很别扭. 最难受的是你在Android Studi ...

  6. 【Unity】2.1 初识Unity编辑器

    分类:Unity.C#.VS2015 创建日期:2016-03-26 一.简介 本节要点:了解Unity编辑器的菜单和视图界面,以及最基本的操作,这是入门的最基础部分,必须掌握. 二.启动界面 双击桌 ...

  7. 转载unity编辑器xml数据库插件

    unity编辑器xml数据库插件 注:9月9日更新,其中MyXML.cs中有一句代码写错,查找功能失误,文中已经修改! 注:9月1日更新说明:xml存储结构,因为在用xml之前不知道正规的xml数据结 ...

  8. [Unity] 编辑器运行中动态编译执行C#代码

    (一)问题 之前写Lua时,修改完代码 reload 就可以热重载代码,调试起来十分方便(重构则十分痛苦). 现在使用 C# 做开发,目前还没找到比较方便地进行热重载的方式.只能退而求其次,在调试上找 ...

  9. eclipse自动排版JSP问题

    eclipse自动排版JSP非常难看,标签每行显示不完整,开发时很难受,下面设置一下这个就好多了: window-->preferences-->Web-->HTML Files-- ...

随机推荐

  1. Coursera机器学习基石 第2讲:感知器

    第一讲中我们学习了一个机器学习系统的完整框架,包含以下3部分:训练集.假设集.学习算法 一个机器学习系统的工作原理是:学习算法根据训练集,从假设集合H中选择一个最好的假设g,使得g与目标函数f尽可能低 ...

  2. 关于JavaScript中省略元素对数组长度的影响

    在学习<JavaScript权威指南>第六版的第7.1节中通过数组直接量创建数组时,我们可以不给数组的某个元素赋值,它就会使undefined.虽然是undefined,但我们调用数组对象 ...

  3. HDU 1016 Prime Ring Problem(素数环问题)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1016 Prime Ring Problem Time Limit: 4000/2000 MS (Jav ...

  4. 有了SSL证书,如何在IIS环境下部署https?

    昨天各位小伙伴都很开心的领取了自己的SSL证书,但是大部分小伙伴却不知道如何部署,也许是因为第一次接触SSL这种高端的东西吧,不过个人觉得就是懒懒懒...本来小编也挺懒的,但是答应了各位小伙伴的,那么 ...

  5. Deepin深度Linux系统安装记录

    测试设备:小米游戏本,最新版15.6进入安装后发现黑屏,所以使用15.5安装 Deepin 15.5 官方介绍页 官方下载 百度云下载 下载后得到文件夹15.5 Release 将里面的ISO镜像文件 ...

  6. 搭建 Redis 的主从

    主从概念 ⼀个master可以拥有多个slave,⼀个slave⼜可以拥有多个slave,如此下去,形成了强⼤的多级服务器集群架构 master用来写数据,slave用来读数据,经统计:网站的读写比率 ...

  7. pt-online-schema-change在线修改表结构

    工具简介 pt-osc模仿MySQL内部的改表方式进行改表,但整个改表过程是通过对原始表的拷贝来完成的,即在改表过程中原始表不会被锁定,并不影响对该表的读写操作.首先,osc创建与原始表相同的不包含数 ...

  8. redis的主从配置

    redis的主备配置比较简单,只需要在配置上新增slaveof属性即可,如果主节点需要密码验证,则在加上masterauth属性. 测试安装一个备用redis,备份前一章的节点redis的docker ...

  9. Redis学习笔记(一)

    定义 Redis是一个开源的使用ANSI C语言编写.支持网络.可基于内存亦可持久化的日志型.Key-Value数据库. 从该定义中抽出几个关键信息,以表示Redis的特性: 存储结构:key-val ...

  10. 在WIN7下安装运行mongodb

    1).下载MongoDB http://downloads.mongodb.org/win32/mongodb-win32-i386-2.4.5.zip 下载Windows 32-bit版本并解压缩, ...