联系方式

咨询热线:400-998-6158

点击此处免费预约试听课程»

常见问题
学习资讯
学习资讯

Unity 手游开发中如何优化性能

Unity 手游开发中如何优化性能

在 Unity 手游开发中,有多种方法可以进行性能优化。

首先,在游戏制作过程中就应嵌入优化环节,而非在游戏完成后才进行。影响性能的因素主要包括 CPU、GPU 和带宽方面。对于 CPU,过多的 draw call、复杂的脚本或物理模拟会影响性能。可通过使用批处理技术减少 draw call 数目,如将使用同一个材质的物体进行合并处理,分为动态批处理和静态批处理。

在 GPU 优化方面,减少顶点处理和片元处理的负担。如减少需要处理的顶点数目可优化几何体、使用模型的 LOD 技术和遮挡剔除技术;减少需要处理的片元数目可控制绘制顺序、警惕透明物体、减少实时光照等;减少计算复杂度可使用 Shader 的 LOD 技术和代码优化。同时,优化美术资源,合理规划图集、约定模型最大三角形面数、制定合理的粒子效果规范、减少模型数量并使用法线贴图代替细节模型,采用平台推荐的压缩方式。还可减少绘制数目,保持材质数目尽可能少,使用纹理图集、Renderer.sharedMaterial 代替 Renderer.material、光照纹理代替实时灯光、使用 LOD 和遮挡剔除等。另外,优化显存带宽可压缩图片、使用 MipMap。

在渲染模块调优中,开启多线程渲染模式,发挥手机多核优势。影响渲染 CPU 执行效率的本质是渲染的面数和渲染提交的次数,需结合游戏在目标客户机型上实测。

对于物理模块,将物理模拟时间步设置到最小化状态,在项目中不低于 16 毫秒。谨慎处理高级脚本和本地引擎 C++ 代码之间的通信开销,如缓存对象的转换需求并一次仅向引擎发送一个请求,将引用本地缓存到元件中以减少获取元件引用的需求。

在处理手机发热发烫问题时,可真机运行游戏进程查看 CPU 占用率,将用户机器分类适配不同画质与特效效果,避免机器与画质不匹配导致发热。

此外,在物理优化方面,Unity 的内置物理系统在移动设备上开销较大。可在 PlayerSettings 中选中 Prebake Collision Meshes,简化 Layer Collision Matrix,禁用 Auto Sync Transforms 并启用 Reuse Collision Callbacks,修改物理项目设置以进一步提高性能,简化碰撞体,使用物理方法移动刚体,在 FixedUpdate 中移动物理体并修改固定时间间隔。

Unity 手游开发如何减少 CPU 负担

在 Unity 手游开发中,减少 CPU 负担可以从多个方面入手。首先,渲染模块是性能大户,开启多线程渲染模式能发挥手机多核优势,在 Unity 项目中默认开启的 Multithreaded Rendering 一般不要去改。单线程渲染流程中,主线程在执行大量逻辑运算后进行渲染指令调用,容易产生卡顿导致帧率下降,而多线程渲染可让其他 CPU 核心处理部分任务,避免主线程等待外部设备状态就绪。对于开启多线程渲染的游戏,若 Gfx.WaitForPresent 函数耗时较长,说明 GPU 工作压力大,需优化 GPU 相关内容。
降低 Draw Call 也是减少 CPU 开销的重要手段。Draw Call 越高,渲染模块的 CPU 开销越大。可以减少所渲染物体的材质种类,并通过 Draw Call Batching 来减少其数量。但要注意,游戏性能并非 Draw Call 越小越好,需平衡 Draw Call 和总线带宽。另外,简化资源也很有效,如减少过量的网格资源和不合规的纹理资源等。
在逻辑代码优化方面,要避免复杂的游戏逻辑和物理计算使 CPU 负载过高。例如,遍历嵌套、实例化多个对象、添加大量碰撞器尤其是网格碰撞器等操作会消耗大量性能。可以简化游戏逻辑,减少不必要的计算,以降低 CPU 负载。

Unity 手游开发 GPU 优化方法

Unity 手游开发中的 GPU 优化可以从多个角度进行。首先,优化美术资源是关键之一。合理规划图集,约定好模型的最大三角形面数,制定合理的粒子效果规范,减少模型数量和顶点数量,使用法线贴图代替细节模型,使用平台推荐的压缩方式,如安卓平台的 ETC1 和 IOS 平台的 PVRTC。
减少绘制数目也有助于 GPU 优化。保持材质的数目尽可能少,这样 Unity 更容易进行批处理。使用纹理图集代替一系列单独的小贴图,它们可以更快地被加载,具有很少的状态转换,且批处理更友好。如果使用了纹理图集和共享材质,可使用 Renderer.sharedMaterial。
在 Shader 方面,少使用 pow、sin、cos 等函数,fixed、half、float 类型要斟酌使用,采取够用的类型就行,在游戏开始前就对 Shader 进行编译和加载。同时,要注意 GPU 优化不够容易出现发热严重、耗电量高和 FPS 降低等问题。GPU 优化的方向包括降低像素的复杂度,如禁用手游中的实施阴影;减少顶点过多的情况,即降低模型面数和复杂度;控制 GPU 的显存带宽。

Unity 手游渲染模块调优

Unity 手游的渲染模块调优对于提升游戏性能至关重要。影响渲染效率的两个最基本参数是 DrawCall 和 Triangle。在 GOT Online 的 Overview 模式中,可以查看 DrawCall 曲线,了解具体的 DrawCall 数量以及 Batch 数量。目前,建议在中低端机型上 Batch 的主体范围控制在 (0,250) 以内。在 Unity 中要区分 DrawCall 和 Batch,一个 Batch 中会存在多个 DrawCall。降低 Batch 的方式通常有动态合批、静态合批、GPU Instancing 和 SRP Batcher 这四种。
可以通过减少模型的顶点数量和片元数量来优化渲染模块。光照优化也是一个方面,同时要降低 Shader 的计算复杂度,节省内存带宽。合理规划图集、约定好模型的最大三角形面数、制定合理的粒子效果规范等措施也能提升渲染性能。减少模型数量,使用法线贴图代替细节模型,并采用平台推荐的压缩方式,如安卓平台的 ETC1 和 IOS 平台的 PVRTC,简化或者优化 Shader,少使用复杂函数,合理选择数据类型。

Unity 手游物理模块优化

在 Unity 手游开发中,物理模块的优化可以从以下几个方面进行。减少射线频率、长度和 layer。善用 Physics Matrix,不要移动静态 Collider,若需要移动可加 RigidBody。尽量使用简单的 Collider 替代 MeshCollider,不同类型进行碰撞检测的相对成本从最耗费资源到最不耗费资源依次为:三角形网格、凸包(三角形网格)、胶囊体、球体、立方体、平面、点。
此外,优化设置禁用 Auto Sync Transforms 并启用 Reuse Collision Callbacks,简化碰撞体,使用物理方法移动刚体,修改固定时间间隔,通过 Physics Debugger 实现可视化,这些措施也能提升物理模块的性能,降低 CPU 和 GPU 的负担。

Unity 手游处理手机发热方法

Unity 手游手机发热问题可以从多个方面进行优化。GPU 负载过高和 CPU 计算量过大是导致手机发热的主要原因。对于 GPU 性能优化,可减少纹理大小,使用较小的纹理尺寸,避免使用高分辨率的纹理,以减轻 GPU 负载。降低渲染质量,合理使用 LOD,减少不必要的绘图面积,对可能导致透支的对象使用轻量级着色器,尽量避免使用半透明材料,使用不透明的材料来模拟半透明的外观。
在 CPU 性能优化方面,简化游戏逻辑,减少不必要的计算,以降低 CPU 负载。使用对象池技术来管理游戏对象的创建和销毁。优化内存使用也很重要,及时释放不再使用的资源,避免内存占用过大,以减轻手机发热。使用纹理压缩技术,压缩纹理,减小纹理占用的内存空间。合理使用多线程,将一些耗时的操作放在后台线程中进行,以分担 CPU 负载。避免频繁的垃圾回收,减少产生大量的临时对象,降低垃圾回收的次数。实时监控性能,使用 Unity 的性能监控工具,实时监控游戏的帧率、CPU 和 GPU 使用情况,及时发现和解决性能问题。

在 Unity 手游开发中,优化性能是一个综合性的工作。需要从 CPU、GPU、渲染模块、物理模块等多个方面进行考虑,同时要注意处理手机发热问题。通过合理的优化措施,可以提高游戏的性能和稳定性,为玩家提供更好的游戏体验。
学校联系方式

更多培训课程,学习资讯,课程优惠等学校信息,请进入 南京火星时代教育 网站详细了解,免费咨询电话:400-998-6158

相关课程