版本 3.8.5
运行环境:微信小游戏.
调用节点的 active方法, 加上子节点大约有三百个,
没有物理组件,都是UI.
在大部分安卓机和一部分iphone机型上有卡顿出现,
卡顿的严重程度跟机器性能没关系, 老款iphone8 不卡, iphone15却卡.
版本 3.8.5
运行环境:微信小游戏.
调用节点的 active方法, 加上子节点大约有三百个,
没有物理组件,都是UI.
在大部分安卓机和一部分iphone机型上有卡顿出现,
卡顿的严重程度跟机器性能没关系, 老款iphone8 不卡, iphone15却卡.
开高性能模式。。。
1.看看设计是否真的需要大批量的active状态修改
2.尝试修改位置代替到不可见的坐标修改active状态
没用的,试过了
绕开的办法是很多,
但这个问题困扰了我好几天.
还以为是算法太复杂,各种改.
最后查出来原因真的很无语了
未必是active问题,有没有可能是组件的onEnable之类的问题呢
unity开发,也要注意这些,不能随意的搞
将透明度设置0 然后移动无限远的地方,然后渲染树遍历的时候 遇到透明度就返回。
node.active 就是有性能消耗的,用 UiOpacity 设成全透明来代替就好
性能消耗热点在哪个函数?
设置active为false,不会返回?
是在update里反复变换true和false?还是一直只是true或者一直只是false?
active 保持为 true,只是把透明度设为 0 的节点里,如果存在 spriteFrame 或者 spine 动画,每次 DrawCall 引擎是不是依旧会去加载材质和渲染(只是单纯肉眼看不到而已)?
protected _canRender (): boolean {
if (DEBUG) {
assert(this.isValid, 'this component should not be invalid!');
}
return this.getSharedMaterial(0) !== null
&& this._enabled
&& this._color.a > 0;
}