slu*_*pet 17 unity-game-engine
我们最近创建了一个资产,在"新"(> 4.6)Unity UI中以表格布局显示数据.我们的一些用户询问绘制调用性能,我们想知道在UI中改进绘制调用的选项(如果有的话).
所以上面的表格在19次抽签中非常一致......
它可以在任何ipad2级别以上的版本上运行良好,但是Unity dev(可以理解)讨厌绘制调用,所以我们希望尽可能地减少这个数字.
您可以在上面的屏幕截图中看到我们为表格创建的层次结构.我们正在为Header/Footer/Body和ColumnOverlay使用蒙版.每个Unity,看起来每个Mask至少需要2次绘制:
http://forum.unity3d.com/threads/unity-4-6-ui-mask-component-takes-2-draw-calls.279840/
此外,我们显然使用一堆Unity UI Text和Sprite元素来绘制所有内容.表格布局的基本特性几乎意味着Sprite和Text对象之间存在多个层次(单元格背景之上的单元格数据等).Unity dev似乎说,当发生这种情况时,根本没有办法不进行多次绘制调用,因为引擎需要每个"层"...期间进行绘制.
http://forum.unity3d.com/threads/solved-new-ugui-and-too-many-draw-calls.266631/
所以...似乎只要你在Unity UI中有一个非平凡的UI布局,你几乎可以保证有一个非平凡(10-20)的绘制调用量.真的吗?如果不是,那么我们能做些什么来减少我们桌子上的抽奖吗?
通过停用每个数据行上的自定义"度量"元素,我能够将绘制调用减少一个.它基本上是一个黑客的"文本"对象,但我只是用它来测量网格大小的单元格,它正在进行额外的绘制调用.测量功能实际上可以正常工作,GameObject已停用.
发现了很大的进步.我在上面提到我的Header/Footer/Body和ColumnOverlay都使用了mask元素.事实证明,我能够重构我的系统,在新的根级元素上包含一个Mask,并删除Header,Footer和ColumnOverlay上的Masks.现在我只在该根元素和Body上有一个Mask.
因此,每一行都包含底部边框线图像,以抵消它的兄弟姐妹.我想也许它正在打印文本元素的"顶部"并强制额外绘制.结果没有......事实并非如此.
此外...我的所有背景图像元素都没有定义精灵属性.他们只是使用"null"并应用了颜色.我想也许如果我创建了一个通用的"白色"精灵并将其应用于我的所有null Image对象,它可能会改进批处理并减少我的绘制调用.结果没有......事实并非如此.
据我了解,您的问题是 UI 批处理。
现在我将尝试解释它是如何工作的。
当您在 Unity 中创建一个空场景时,由于相机和画布,您只有一次绘制调用。我们看下面的图片:
Image因此,当您向场景添加新对象时,您将获得一个新对象。
发生这种情况是因为您向场景添加了新材质。如果您添加更多具有相同材质的对象,它们将被批量分配到一个绘制调用中,并且不会生成新的对象。
如果您向场景中添加一个具有新材质的对象,则会产生额外的绘制调用。
看起来还可以。但是,如果具有新材质的对象位于层次结构中的批处理对象之间并与其中任何一个对象相交,则会遇到问题。您的批处理将分为两部分,并会产生两个卓尔调用。
所以我认为你的问题就在这里。您需要仔细查看您的层次结构,并记住,Image对象Text具有不同的材质。因此,当文本的形状与图像的形状相交时,位于层次结构中Text两个对象之间的每个Image对象都会产生额外的绘制调用。
| 归档时间: |
|
| 查看次数: |
6688 次 |
| 最近记录: |