2

UGUI 深度按兄弟索引排序有什么问题?我看不到任何改进,但只有缺点

例如,我有一个使用多个对象的 scrollRect 游戏。我的对象有一些图像和一些文字。如果您按以下方式订购它们:

-内容

-目的

-图片

-文本

-图片

-文本

-图片

-文字...等

您将为每个对象获得 6 个 drawCall。对于使用相同字体和相同图像的 10 个对象,您将有 60 个 DRAW CALLS!

好的,你可以如下优化它们

-内容

-目的

-图片

-图片

-图片

-文本

-文本

-文本

...ETC

对于每个对象,您将拥有一批 3 个图像和一批 3 个文本。但是您仍然会为每个对象获得 2 个绘制调用,因此 20 个绘制调用对应 10 个相同的对象。

想象一下,你有 5 个不同的滚动视图,里面有对象(就像我一样),有 5 个可见的对象,每个对象都比图像组件和文本组件复杂一点。事实上,我有以下层次结构。

-目的

-文本(1次抽奖)

-图片

- 图像(1 个绘图调用 - 与上面的一个批处理)

-文本(1次抽奖)

-图片(1次抽奖)

-文本(1次抽奖)

-图片(1次抽奖)

-文本(1次抽奖)

我不能修改层次结构,因为有些图像是按钮,为了保持它们的文本清晰并以每个纵横比为中心,它们需要成为按钮的子元素并锚定到它们。我的对象生成 7 个绘图调用,并且在 5 个不同的滚动视图上有 5 个可见对象使我达到 7 * 25 = 175 个绘图调用。

现在,使用基于 z 的深度,我们将只有 2 个绘制调用。因此我的问题出现了,这种方法有什么问题?为什么Unity会这样做?这是否有积极的结果,我太盲目了,看不到它?

4

1 回答 1

0

我想这一切都回到了渲染顺序和批处理。要调查单个绘图调用中的内容,请使用 Unitys 内置的 Frame Debugger,这是非常有用的工具。

如果您希望进一步优化这一点,请在 sprite 设置中使用 Packing Tag。Unity 将为您创建 UI 图集,您的绘图调用将大大减少。

在此处输入图像描述

于 2016-05-05T09:36:36.833 回答