【Unity3D游戏开发】NGUI之DrawCall数量 (四)

本文探讨了Unity3D中NGUI的DrawCall管理,解释了DrawCall数量与Atlas、Panel和顺序的关系。减少DrawCall的方法包括合理安排同一Atlas的元素在同一Panel下,避免不同Atlas的Sprite深度穿插,以及理解UIWidget的显示顺序和UIPanel的权重。通过源码分析,展示了NGUI如何通过排序和归类Widget来合并DrawCall,以减少GPU状态切换的消耗。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看了很多关于NGUI drawCall的文章,见得比较多的一个观点是:一个 Atlas 对应一个Drawcall。

但其实NGUI内部有自己的一套对DrawCall的处理规则。相关的规则有:

1.Atlas图集数量有关

2.Atlas图集的调用顺序(绘制顺序)有关

3.和UIPanel的数量有关


一、减少NGUI 3的DrawCall数量

升级到NGUI3, DrawCall数由5个增长到了十七八个,想想应该不会是NGUI的问题吧。后来整理了一下,发现有两点: 
        1)对于同一Atlas,DrawCall数取决于Panel的数量(实际上是UIPanel这个脚本的数量)。比如说,我有两个Sprite,这两个Sprite属于同一Atlas,但是位于不同的Panel下,这时候DrawCall 数是2, NGUI 2中则是1。使用建议就是只使用一个Panel。 
        2)对于不同Atlas,同一Panel下的Sprite,可通过Depth调节显示层级,Z值不管用,这点跟NGUI 2中刚好相反。还有就是不同Atlas的Sprite 的Depth值尽量不要来回穿插。比如Atlas A中有两个Sprite a 和 aa,Depth分别为1,3;Atlas B中有两个Sprite b 和 bb, Depth分别为2,4, 则DrawCall 总数为4而不是2。(在NGUI 3中,你可以点击Panel ,在Inspector面板中看到每一个DrawCall的调用细节 ) 

        简单的说就是DrawCall的数量不只跟Atlas的数量有关,还跟Atlas调用顺序有关,使用的时候最好只用一个Panel, 不同Atlas的Sprite Depth尽量不穿插

参考文章:http://game.ceeger.com/forum/read.php?tid=14653

 

二、NGUI 减少DrawCall

前置说明一:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值