项目中掉落物卡顿的原因

229 阅读1分钟

问题

我们游戏项目是类Roguelike游戏,怪物死亡会掉落大量掉落物。掉落物上面会有不同颜色的粒子光柱。掉落物会根据不同掉落物的稀有度开启不同颜色的粒子光柱。 掉落物的Prefab资源是预载入的。每次掉落会生成一个新的掉落物。当遇到大量掉落时,卡顿非常明显。

Debug

经过层层添加Profiler标签Debug发现,性能瓶颈发生在粒子系统的Prewarm。

这是官方手册对Prewarm的解释。简单来说,当你打开了勾选Prewarm的粒子系统,一开始粒子已经模拟执行了一个周期,所以看到的是完整的粒子循环,而不是从头开始释放粒子。

当粒子勾选Prewarm时(勾选Prewarm,粒子必须是可循环的),粒子第一次Play会进行预热处理(Prewarm),因为我们的Profab中粒子数量较多,所以耗时非常明显。

结论

经过测试发现,只有第一次Play,Prewarm会比较耗时,再次调用Play没有发现明显耗时。 解决方案:将掉落物Prefab放入对象池中,每次使用时Play粒子,回收Stop。这样就可以避免粒子第一次播放Prewarm耗时严重的问题。