Unity性能优化方案之 内存篇

总体来说,内存的优化在于贴图和网格

assetbundle采用unity5自带的,减少每一份的内存

合并贴图TexturePacking,共用材质球   ,拆分贴图png采用etc

手动合并网格或者自带合并网格

 

 


总结

资源内存占用:
一、纹理
(1) 纹理格式 使用ETC1代替RGBA32,占用内存变低,ETC1不支持alpha,所以把图片拆成2个
(2) 纹理尺寸 越低越好 不超过1024*1024
(3) 关闭mipmap
(4) 关闭 图片读写操作 Read & Write
(5) 尽量使用2的n次幂大小的贴图,否则GfxDriver里会有2份贴图;

二、网格
(1) Normal、Color和Tangent,注意里面的属性,如果100个里面有99个没有color属性,1个有color会导致所有都会加上color属

(2)尽量控制模型的面数,小于1500会比较合适;
(3)不同设备使用不同的模型面数;
(4)尽量保持在30根骨骼内;
(5)一个网格不要超过3个material;
 
引擎模块自身占用:
 保证assetbundle被清干净

托管堆内存占用:
 高频率地 New Class/Container/Array
 Log输出

代码优化:
 尽量避免代码中的任何字符串连接,因为这会给GC带来太多垃圾;
 用简单的“for”循环代替“foreach”循环;
 为所有游戏内的动态物体使用内存对象池,可以减少系统开销和内存碎片,复用对象实例,构建自己的内存管理模式,减少
Instantiate和Destory;
 尽量不使用LINQ命令,因为它们一般会分配中间缓器,而这很容易生成垃圾内存;
  将引用本地缓存到元件中会减少每次在一个游戏对象中使用 “GetComponent” 获取一个元件引用的需求;
 减少角色控制器移动命令的调用。移动角色控制器会同步发生,每次调用都会耗损较大的性能;
 最小化碰撞检测请求(例如ray casts和sphere checks),尽量从每次检查中获得更多信息;
 AI逻辑通常会生成大量物理查询,建议让AI更新循环设置低于图像更新循环,以减少CPU负荷;
 要尽量减少Unity回调函数,哪怕是空函数也不要留着;(例如空的Update、FixedUpdate函数)
 尽量少使用FindObjectsOfType函数,这个函数非常慢,尽量少用且一定不要在Update里调用;
 千万一定要控制mono堆内存的大小;

 

     

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值