更改层级会打断合批问题 全是图片 已经使用自动图集

引擎版本 3.8.0

没换层级前只有5个dc
换完之后直接500了


下面是代码截图

dcTest.zip (22.4 KB)

这个是测试demo

大佬们帮忙看看

多人测试过都有问题,这难道不是bug么 ????

改一下BATCHER2D_MEM_INCREMENT就好了,至于为什么没改之前不切换层级dc是低的,需要有心人研究一下Batch2D :sweat_smile:

macro.BATCHER2D_MEM_INCREMENT = 412

@ccclass('NewComponent')
export class NewComponent extends Component {
    @property(Node)
    item: Node = null!;

那这合批是有bug了。@官方

当Sprite过多时, 默认的 StaticVB 就装不了,会创建新的 StaticVB 来装。
比如,有 StaticVB1 … N
当顺序不变时,假如每一个 StaticVB 装100个,那 5 个DC 可以绘制完。
但当你突然更换了顺序时。 StaticVB 的绘制顺序就乱了,就不能合批了。

解决办法就是 macro.BATCHER2D_MEM_INCREMENT 这个值加大。 最大可以 2303.

这样,一个 StaticVB 就可以绘制完所有的 Sprite。

这个不是引擎BUG,是设计如此。
引擎为了降低空包测试时的开销,这个值给得比较小,普通项目都能满足。
对于需要使用大量Sprite的项目,这个值可以给大些。 内存开销不大,可以忽略。

1赞

staticVB不会重置吗?那么有手动重置的接口没有?他现在这个情况,改下macro.BATCHER2D_MEM_INCREMENT就行了。但是如果以后有谁的项目中,总的sprite的内存占用数量超过最大值,还是会有这个情况出现。至少可以用个代码让StaticVB重置一下吧