3.6.3 UITransform不能正确更新width

引擎版本3.5.2

节点树如图image
parent是一个节点,Layout带有Layout组件,icon是一个图片节点,Label带有Label组件


整个节点添加到Canvas后立马执行两步骤
step1:tween(parent).set({scale:new Vec3(0,1,1)}).to(1,{scale:new Vec3(0,1,1)})
step2:parent挂载的自定义脚本的onEnable中更新Label的文字,然后执行Label.updateRenderData(true)和Layout.updateLayout(true)

这个时候获取到的Layout.getComponent(UITransform).width为120,实际上也应该是120
至此都还是正确的


如果这个时候隐藏parent,再需要的时候active=true,然后重新执行step1和step2,发现Layout.getComponent(UITransform).width的值是错误的5,但是如果延迟一帧去获取则是正确的120

怀疑是UITransform在这种情况下有bug

我知道原因了
引擎代码里Layout的updateLayout有问题

这里调用了_doLayout


_doLayout里判定了!this._init || this._childrenDirty才会去执行_checkUsefulObj

但是updateLayout在已经传了参数force为true的情况下,没有this._childrenDirty=true,导致没有执行_checkUsefulObj,也就判断错误了

目前的处理办法是在getComponent(Layout).updateLayout(true)前先getComponent(Layout)._childrenDirty=true

顶顶顶顶顶

顶一顶额,引擎组已经忙到都不回复了么

1赞

3.6.3一样有问题。

这种自带初始化的组件一直存在这种【组件排序】问题,不限于 Layout

哈哈哈哈,3.7公测版说是搞定这个问题了

3.8版本依然有这个问题

2赞