我发现,当设置Renderable2D的类的color.a为0时候,drawcall会降低,但是UIOpacity即使将不透明度设为0也不会剔除。
随便举一个需求,例如在制作动画的过程中,美术都是通过透明度来控制节点的可见性的,但是往往需要批量控制节点,所以肯定会用到UIOpacity,这里我就有一些疑问,为什么UIOpacity不可以和Renderable2D一样降低drawcall?
后来我自己动手丰衣主食,对updateAssembler函数做一点点小改动实现Drawcall的降低:
cc.Renderable2D.prototype.updateAssembler=function updateAssembler(render:any){
if (this._renderDataFlag) {
this._assembler!.updateRenderData(this, render);
this._renderDataFlag = false;
}
if (render._pOpacity>0 && this._renderFlag) {
this._render(render);
}
}
我发现在渲染时,会进入一个walk函数,里面其实已经计算出了当前节点最终的透明度,并且已经在updateAssembler函数中传入,增加一个render._pOpacity>0 判断就可以了。
请问这样的hack方法考虑是否周全,未来官方版本是否会考虑UIOpacity设为0时候降低Drawcall?