2.4.6 ios动态加载fbx较卡的问题,急急急

测试机型:ipx
测试语句:
tool.loadResPrefab(‘Model/ISLAND/’ + name + ‘_island’, function (prefab) {
let n = cc.instantiate(prefab);
n.name = uuid + name;
n.setPosition(cc.v3(pos.x, pos.y, 0));
n.parent = cc.find(‘Canvas/ISLANDS_UTIL’)
})
//确定是n.parent = cc.find(‘Canvas/ISLANDS_UTIL’)这一句导致的卡死

先将fbx做成prefab。

当动态加载顶点数几千+的prefab时,addchild到场景时会卡住几秒(根据顶点数量),在这之后,反复添加此prefab到场景,都不会卡死了。

换一个fbx动态加载,第一次加载到场景依然会卡几秒。

就是说每一个fbx第一次添加到场景,都会导致游戏卡死几秒

测试几百个顶点的fbx不会出现

@jare @panda

可测试用的fbx
FantasyIslandChallenge.fbx.zip (1.1 MB)

这个fbx在web第一次加载也会卡一下,但不是太明显,3万2的顶点数量
考虑过是不是进游戏的时候将所有prefab都addchild一次再destroy以优化表现……但加载时间太长太长

优化空间在引擎和游戏资源这两个地方,如果短时间找不到这两处的优化方案,建议你还是在 loading 界面或者其它对帧率要求不高的节点加载时将节点加载到场景中立即删除吧,这样后续加载就快了。

这个问题的原理能告诉下吗
毕竟几千顶点动态添加就卡死一点时间,资源优化的可行性感觉并不高

手动顶,有优化过这一块的大佬吗

主要是addchild的时候,游戏处于卡死状态,这意味着只能做loading页面,场景元素一多这个loading会很长时间,游戏又是沙盒形式,没有边界,总不能在移动的时候突然loading吧,第一次渲染fbx的时候这个地方不是多线程的,看引擎底层也没找到什么预加载之类的方法,还有什么优化建议没,这个demo我做了几个月了,不能荒废啊大佬

只能做预缓存,但遇到了一个问题
将fbx制作的prefab,启动时批量addchild,然后destroy->release,但这个时间不是固定的,相同的代码,有时5秒多,有时14秒多,而且多次尝试没有发现规律,而且不是5秒多就是14秒多,这个地方有什么优化的方向没。
测试机型ios ipx。
测得web上这个预加载addchild是异步的,不会阻塞,加载时间也稳定

@panda @EndEvil

有定位到热点么,具体哪个部分耗时最大呢,是 addChild 还是 instanstiate

instanstiate 几乎不耗时。
耗时全在渲染的那个阶段,具体哪里说不上来。
我把demo给你,你看看



你看,差距很大

这个时间包含了什么时间

把所有fbx制作的prefab add一遍,然后再释放,这样动态添加prefab的时候就不会卡了。



主程这个问题测了下在3.3.2也是需要这样处理,在3.3.2中动态添加fbx的时候,只要fbx顶点超过几千,显示的时候都会卡一下,所以必须预加载。

测试的时候,xcode clean一下容易出现耗时较少的情况,也不固定,难道是我手机的问题

加载的内容太多了,不好确定是加载的耗时,还是 instanstiate 和 addChild 的耗时,能否分成两个指标

我截一个web的chrome性能图给你,web如果不预加载,在动态加载fbx的时候(测试用3万顶点),也会卡一下,我把卡一下的图给你。

还有截一个只instanstiate不addchild的情况给你看看


web

了解了,看起来 shader 是在第一次渲染时编译的,编译的耗时很大