性能优化
为什么要性能优化?
一张地图的性能优化是极其重要的,如果性能不过关,很多真正喜欢你的地图的玩家可能根本玩不了这张地图。
但性能问题往往难以定位且较为复杂,这里提供一些常见问题及对应的处理方式。
性能优化的核心思路
性能优化最核心的思路就是将没有用的东西销毁或关停,比如不必要的组件能删的尽量删除、触发区域不需要触发的碰撞类型不要勾选、界面控件动画不需要播放记得停止等。
每台设备的算力和内存都是有限的,只有把没有用处的东西都关停掉,才能把资源释放给需要的内容。
表现导致的性能问题
组件过多导致掉帧
过多的组件意味着同屏要渲染的东西变多了,需要加载的组件数量、组件属性的变化、模型的复杂程度等因素都会影响到地图性能。
过多的半透堆叠导致掉帧
有些组件或特效是由半透的材质制作的,当它们发生多层堆叠后,会对渲染计算造成很大的负担,所以要尽量避免半透组件或特效多次堆叠。
光源导致掉帧
当使用光源组件的时候,会少量增加渲染压力,所以也应删除不必要的光照。
后处理导致掉帧
有一些滤镜效果比如美漫效果、水墨风格,其中的描边功能会对渲染造成一定压力,所以减少描边的使用会对性能有一定的提升。
镜面组件导致掉帧
使用镜面组件相当于双倍渲染,所以会增加渲染压力导致掉帧。减少镜面组件的触发距离、减少需要反射的内容,都可以有效地防止掉帧。
表现问题的性能优化方式
删除一些不必要的组件以减少加载地图的性能开销和实时游玩的渲染压力。
将组件合并到一起,可以减少内存开销、缩短加载时间,是大地图中最好的优化方式之一。
检查是否广泛使用半透组件、光源,并适当删除一些非必要的半透、光源组件。
物理导致的性能问题
高频运动导致卡顿
- 当有过多的运动器或在运动器上绑定了过多的组件时,会导致运算量变大,可能会出现卡顿、发热等情况。
- 若大量合并组件、绑定组件或自定义外观的组件保持运动,此时一个组件的运动可能要联动更新几十上百个组件的位置。
受外力组件导致卡顿
受外力组件如果发生大面积的碰撞也会导致瞬间计算量增大,可能会导致卡顿等情况,比如同时生成100个篮球,且它们之间还有碰撞,也容易导致卡顿。
物理碰撞检测导致卡顿
- 触发区域、技能、子弹等功能都会用到物理碰撞检测,物理碰撞检测也会有一定的开销,尤其是使用实体子弹时,很容易导致卡顿。
- 物理碰撞的形状(立方体 < 球 < 运动立方体 < 异形)、大小、触发检测的频率(类型、数量)都会影响到碰撞检测的性能。
物理问题的性能优化方式
删除一些不必要的运动器、减少生成的受外力组件的数量。
尽量减少受外力组件的数量、避免受外力组件之间相互碰撞。
非必要的情况下,避免使用非正方形的大触发区域,宜使用较小的方形触发区域,并仅进行必要且精确的碰撞检测,以保持合理的性能开销。
如果有使用子弹类技能,尽量使用简易子弹,它会有更好的运行性能表现。
逻辑导致的性能问题
蛋码本身的运行开销通常不大,但在进行创建、销毁等行为时,会带来较大的开销。
高消耗行为
- 高频率运行的蛋码用来创建、销毁:比如0.03秒循环的计时器循环生成生物蛋,这种行为很容易导致卡顿。
- 同帧运行的逻辑过多也会导致性能卡顿,比如同帧创建100个生物蛋或生成大量的组件等。
其他类型的性能问题
不必要的逻辑未停止
- 界面控件动画并没有停止,只设置了界面面板为隐藏,此时后台还在计算并更新节点的位置。
- 生物蛋看起来是待机状态,但实际上AI并未停止,只是没有路线可走,那么也会持续消耗设备算力。
自定义音频性能问题
- 自定义音频有一定的性能开销,同时播放过多自定义音频会有明显的卡顿。
合理使用多关卡可以缓解很多性能问题
- 绝大多数的卡顿都是因为内容太多导致的,如果可以合理的使用多关卡,让地图的内容分配到不同的地图中,可以解决很多性能问题。
