Unity3d客户端优化
2024-08-17 15:17:28 0 举报
AI智能生成
Unity3d客户端优化是一项关键的开发任务,旨在提升应用程序的性能和稳定性。优化过程可能包括降低资源占用、提高渲染效率、减少加载时间和改善网络通信等方面。这对于确保良好的用户体验和应用程序的成功至关重要。优化工作通常包括对场景进行优化、脚本优化、纹理优化以及内存管理等关键环节。其中,场景优化包括减少Draw Calls,使用遮挡剔除(Occlusion Culling)技术,以及合理布局场景以减少渲染消耗。脚本优化则涉及代码重构、避免频繁的GetComponent调用以及使用合适的数据结构等。纹理优化主要是降低纹理大小,使用压缩格式以及合理的Mipmap设置。内存管理则涉及到对象池、字符串拼接优化以及避免不必要的内存分配等方面。总的来说,Unity3d客户端优化是一个综合性的任务,需要全面考虑各个方面以实现最佳的性能。
作者其他创作
大纲/内容
性能优化
优化目标
至少20多FPS才能让画面看上去不难受
性能保障方案
概述
事后发现问题,解决问题,代价总是很高的。
尽量做好日常保障,并且能第一时间发现问题。
方法
在程序设计和实现的时候 ,就考虑到性能优化
在数字内容制作之前,尽量约定好规格
每日构建和测试版本,记录性能指标。发现问题第一时间去找到和处理
CPU
DrawPrimitive/Draw Call
数量决定CPU的负担
方法
尽可能的去合并可合并的模型
注意:平衡好模型合并和可见性裁剪的关系
线程
检查是否有线程之间的等待
检查网络是否在独立的线程中操作了
指令集
数学优化
sqrt
网络上可以搜到快速Sqrt的算法,如果精度能满足,就用哪个
化简或者预计算
有些高消耗的计算,如果可以预先把计算方法化简,或者预先可以知道结果,就预先做好公式简化或者替CPU算好。
程序代码优化
空间换时间
有些数据如果可以预先存在内存的,就不要再运行时计算出来
预先算出结果
有些公式如果预先可以算出结果的,就不要再运行时去运算。
Graphic
三角面
在保证效果的情况下,尽量减少模型面数
通过可见性控制,降低同屏三角面数量
LOD
贴图
平衡好贴图尺寸和清晰度
生成mipmap
组织分配好图片元素的图集
让贴图尺寸是2的幂
压缩贴图
材质
考虑Shader的复杂度对性能的影响
控制好半透明物体数量
视距
调整好摄像机远截面的距离
特效
控制好粒子数量
渲染管线/Shader
减少Sampler函数
如果能预先算好,就尽量减少一些数学函数的调用。比如sqrt,三角函数等。
控制好数据运算精度
能在vs中处理的,尽量不在ps中处理
IO
IO操作时性能较低的操作,尽量不要再Update中篇幅的操作IO
检查
是否有频繁的读写文件IO
是否有频繁的内存分配和释放
优化工具
Unity引擎
自带的Profiler
Code Profiler
Render Profiler
Network Profiler
Memory Profiler
Physics Profiler
第三方
UWA
GOTLocal
GOT ONline
线上测评
线下深度优化
网络优化
多线程
消息压缩
Protobuf
利
压缩更高效
弊
开发效率稍低
JSON+gzip
利
开发很便利
弊
压缩效率和执行效率相对较低
加载优化
目的
提高数据加载速度,让玩家尽快开始体验游戏
数据序列化
意义
加载到内存直接使用数据,不需要再对数据进行解析、组织等操作。
延迟后台加载
包体优化
目的
提高下载转化率
方法
aab包
上架GooglePlay的包的一种优化方案
延迟更新/下载
有些后期会用到的游戏内容,在游戏玩到一定阶段,触发后台下载。
资源压缩
贴图压缩
压缩格式
声音压缩
降低码率
降低采样率
使用压缩格式
模型压缩
优化面数
优化顶点数据的位数
耗电优化
考虑方向
优化IO
内存
文件
网络
优化CPU
优化渲染
内存优化
作用
更少的内存使用将获得更大的设备适配性
做好资源内存预算
举例
贴图
模型
音效
游戏对象
做好系统内存预算
尽量为各个系统预先分配好内存
做好内存监控
在开发的过程中,监控好内存的变化。在开发的前期,可能会超预算的使用,不过在后期就要开始寻找可优化的内容。
使用Profiler工具进行持续的记录。
0 条评论
下一页