【请教】关于 UIOpacity 不透明度设为0不能降低drawcall的问题。

我发现,当设置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?

可以这样改,目前对这个问题的修复还在考虑中,暂未排期。 :sweat_smile:

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。