经测试,iPhone12和iPhone10等真机运行,引擎版本3.6.1 ~ 3.8.7。在loadScene时,卡住超过30s以上。
在IPhone15和iPhone16则正常。可以1秒跳转场景。
经过我的测试,在释放3D粒子的buffer时,耗时特别长。如果旧场景中没有3D粒子,则低端机正常1s内可释放完毕。
麒麟子大神也看过了。
是触发gc了,gc在销毁原生资源,引起了卡顿。gc时机不同,卡顿的点也不一样。具体哪个buffer在销毁还没定位到。
有上线过ios原生的大佬们解决过该引擎bug没有。联系我哈。
这种级别的bug,根本上不了线的。就算过审也没意义。发行是不会买量的。
挺急的。在线等。
3d粒子搞一个pool缓存起来不释放试试,比较一般粒子效果应该也不大
我用3.7的引擎,也用3D粒子,iphone 10-12 没有碰到过这种情况。
超过30秒,就算gc销毁原生资源,也不可能发生这么长的时间,要检查一下你的buffer是否本身存在问题(而不是3D粒子的系统问题)。
你可以在cpp释放buffer的地方,打日志进行计时,如果释放超过1秒,就打印出buffer的各项参数,观察一下参数是否异常,或条件断点下来看看。
另外也有可能是逻辑问题或者竞争死锁问题,这种情况,你在释放buffer的地方就会找不到超过1秒的释放点。这种情况只能你自己找找了,建议碰到30秒的卡顿时,立即中断下来进行调试,看看各个线程的堆栈都在哪里。
针对竞争或者类似的问题,有一种比较方便尝试的方法即是延迟释放,用定时器延迟个几毫秒再进行释放,略过这一帧,看看是否就正常了。对死锁或迭代器失效的问题有奇效。
1赞
3.8 3D粒子只碰到开拖尾和warmUp,buffer长度是错的,metal会崩溃,没碰到销毁特别慢的情况。或者你自己调用stop前粒子的activeInHierarchy是false,这时候clear不掉的,反复play会导致粒子的triangle一直上升,可能是这个导致销毁慢?