3.7.2 bug:当UIOpacity的数值为0时,更新根节点位置导致子节点位置有误

好像这个问题之前2.x就有,3.7.2优化了opacity为0就不渲染后,这个问题一并带过来了

我在想,opacity为0可以不渲染,但似乎不应该不dirty

1赞

具体的复现步骤是?或者方便给个测试 demo?

这不就是我之前提的问题吗 官方预计是3.8修复 https://github.com/cocos/cocos-engine/issues/14570

@215194780 这个会在380改吗,或者能否先给个修改方法呢

不确定你和他之前的情况是不是一样,需要先确认下问题
这是他之前反馈的,你看看是不是一样

NewProject_opacity_bug.zip (39.4 KB)
我也不好确定是不是完全一致,上面是一个测试工程,用3.7.2打开,使用mac模拟器就能复现

@215194780 额 这个可修么

https://github.com/cocos/cocos-engine/issues/14570
issue 上有同步信息,你试试父节点的 active 状态重置下,active = false,active=true

升级到3.7.2前我们项目有很多地方用到了opacity=0,你是说让我们每次修改opacity后 都要设置一下active?
@215194780

3.8.3 ios原生依然会出现这个问题,android没有看

你研究下 node的hasChangedFlags 这个属性,每次让Opacity > 0 时,调佣下这个

1赞

具体怎么调用呢?

3.8.7 android还有这个问题

可以考虑先使用着色器修改 A 通道分量值来兼容问题了(即先不使用 UIOpacity)

我还没试过,用shader改透明度的话,能减少drawcall吗,我的使用场景就是为了不渲染屏幕外的节点才去改的透明度

不要延后处理然后就没消息了啊
issue 都关闭了
开发者手动改 flagChangedVersion 只能是临时方案
求修复

噢,shader 不会降低 dc,如果使用多摄像头+ Render Texture 的形式来应用着色器还会增加dc。

所以如果你使用 UIOpacity 是为了减少 dc,就不适合改为着色器形式了。