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-- ...
随机推荐
- springmvc和easyui使用ajax前台后台互传数据,假删除提示警告问题。
前台 //删除 多/单条数据 function del(cid){ var id=''; if(cid=='-1'){ if(getSelections().length > 0){ id=ge ...
- 【luogu P2195 HXY造公园】 题解
题目链接:https://www.luogu.org/problemnew/show/P2195 fir.吐槽题目(省略1w字 sec.考虑对一个森林的维护,每棵树用并查集维护. 操作1:输出当前查询 ...
- LeetCodee 105. Construct Binary Tree from Preorder and Inorder Traversal
问题重述: 问题求解: 我们换一组比较有代表性的样例, 对于上图的树来说, index: 0 1 2 3 4 5 6 先序遍历为: 中序遍历为: 5同理,右子树也是如此.这样不难看出本题应该用递归方法 ...
- 个人开发者即时到账收款方案 BufPay.com
BufPay 个人即时到账支付平台 前言 作为独立开发者,一般只有一个人独立奋战,做出了产品需要收款是非常麻烦的,接入支付宝微信支付都需要公司公户,而注册公司.开公户等一系列操作非常麻烦,成本也很高一 ...
- Flask的request和session是从哪里来的?
因为之前一直在项目中使用django, 所以在学习Flask的过程中, 难免对吧django和Flask进行对比, 这一次我发现Flask中的request和session并没有想象的那么简单, 所以 ...
- GitLab 基本操作
登录 在浏览其中输入http://192.168.3.11:8888 如图1登录界面. 图1 注:第一次新增用户,会发送修改密码链接到用户的邮箱中,用户会收到如图2邮件. 图2 2. 修改密码 点 ...
- usb之鼠标作为按键输入
1. 首先搞清楚,鼠标点左键.右键等能得到什么数据,然后分析这些数据上报事件即可. 第一个基本点:usb_alloc_urb函数,创建一个struct urb结构体,只能使用这个函数来创建,它是urb ...
- Leecode刷题之旅-C语言/python-141环形链表
/* * @lc app=leetcode.cn id=141 lang=c * * [141] 环形链表 * * https://leetcode-cn.com/problems/linked-li ...
- C++ STL lower_bound()和upper_bound()
lower_bound()和upper_bound()用法 1.在数组上的用法 假设a是一个递增数组,n是数组长度,则 lower_bound(a, a+n, x):返回数组a[0]~a[n-1]中, ...
- golang 并发执行函数func类型slice
golang的slice支持func.使用func slice要注意func要完整描述入参出参. 如果需要执行一系列类型相同(入参出参格式相同)的函数,可以动态添加到一个slice里面.range s ...