Editor编程 GUILayout为什么控件一多一复杂性能就差的不行?

本文探讨了Unity Editor中使用GUILayout创建大量UI对象时,为何性能会显著下降,尤其是在布局更新和重绘过程中的耗时问题。
摘要由CSDN通过智能技术生成
UnityEditor所用的UI框架是很老的那套IMGUI。
首先我们要知道IMGUI的处理流程。IMGUI将每一次的绘制拆分成好几帧,不同帧所处理的工作任务都不一样,任务类型由EventType.current表示。
EventType.Layout EventType.Repaint 这两个类型是IMGUI性能里最重要的。

GUILayout内部维护有一个stack,stack里保存的是每个控件的rect。
每次OnGUI执行时调用GUILayout.Button,第一帧EventType.current是EventType.Layout,这一帧并不做绘制工作,而是先计算GUILayout.Button的Rect push到GUILayout内部维护的stack里。接着在EventType.current是EventType.Repaint的那帧正式绘制。

所以IMGUI的性能问题主要是出在 计算控件大小、布局、渲染,还有就是字符串转GUIStyle的转换效率上。

//测试CalcSize方法性能GUILayout.Button
//GUI.skin.button.CalcSize(new GUIContent("测试" + i));
//计时开始
for(int i=0;i<1000;i++){
 //按钮创建代码
 GUI.skin.button.CalcSize(new GUIContent("测试" + i));
}
//计时结束
//耗时 0.0146211560081611
//测试GetRect方法性能
//GUILayoutUtility.GetRect(new 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值