游戏开发论坛

 找回密码
 立即注册
搜索
查看: 16690|回复: 1

Unity3D游戏内存瘦身指南: UI优化是关键

[复制链接]

1万

主题

1万

帖子

3万

积分

论坛元老

Rank: 8Rank: 8

积分
36572
发表于 2015-12-17 10:52:54 | 显示全部楼层 |阅读模式
  游戏占用的内存中,UI部分主要是贴图资源和字体资源。其中贴图是单张图片,而字体包括UIFont和TrueTypeFont(TTF)。

  资源占用内存大小,从Unity Profiler可看到许多细节。

1.jpg


  一、贴图占用内存优化

  (1)缩减贴图占用内存

  注意,贴图资源占用内存大小不等于文件大小,而是与资源导入设置有关。同一个导入设置则只与资源宽高尺寸有关,与资源原始文件格式无关。在进行安装包大小瘦身时,已针对各种应用场景,有损或无损的缩减贴图资源大小。由于资源加载后占用内存大小与安装包打包前资源大小一致,所以安装包瘦身实际上也是在减少贴图资源占用内存大小。

  举个例子:一张512x512贴图。

  使用RGBA 32bit真彩,占用内存 = 4Bytes*512*512 = 1MB;

  使用RGB ETC 4bit压缩,占用内存 = 0.5Bytes*512*512 = 128KB。

  具体的压缩选型和操作细节,可参考安装包瘦身一文。

2.jpg


  某些压缩方式是无损的,某些是有损的,应按需采用。

  二维纹理 Texture 2D 的导入参数说明:

  http://game.ceeger.com/Components/class-Texture2D.html

  (2)拆分大资源,且按需加载

  贴图资源使用方式包括UITexture和UIAtlas这两类。其本质都是一张图片,区别在于UITexture是单张大图,而UIAtlas是多张小图合集做成一张大图。某些应用场景中可以将大尺寸UIAtlas拆分为小尺寸UIAtlas和多个UITexture,然后按需加载显示。拆分后内存占用大小<=拆分前内存占用大小。

  举个例子:新手引导图集(调整前1024x1024,4MB)。

QQ截图20151217105213.jpg


  单局中并不需要同时显示全部角色和道具Icon。于是可拆分成多个,按需加载,即可减少占用内存总大小。

3.jpg


  新手引导图集(调整后1024x512,2MB)。

4.jpg


  再加数个拆分出来的小图(几百KB)。

5.jpg


  (3)及时回收过时资源

  方法(1)优化了常驻的内存大小。如果一张贴图使用后不再被使用,又没有被及时回收,那么内存占用总量会只增不减。这些过时资源应及时回收。

6.jpg


  实践中发现几个现象:

7.jpg


8.jpg


  回收UI资源的代码片段(供参考):

9.jpg


  此方法在Application.LoadLevel前后执行。此方法有些暴力,全部UITexture和UIAtlas的贴图资源都被扫描且可能被UnloadAsset。

  此处白名单Texture和动态创建Texture需单独处理,否则可能报错。举例:下图是UnloadAsset网络下载的玩家头像报错了。

10.jpg


  如果贴图资源再次使用,那么在加载prefab时会重新加载相关贴图资源。

  其中包含几个关键方法:

11.jpg


  注意这里卸载资源用协程分了几帧实现。受限于上述方法的先后执行顺序,放在同一帧处理达不到卸载的目的。

  二、字体占用内存优化。

  (1)UIFont字体,占用内存大小与字体贴图资源导入设置有关。优化思路同Texture贴图,包括缩小字号、只制作所需字符、复用字体等。比如以下字体同时用在单局结算分数和伙伴技能冒字。

12.jpg


  (2)TTF字体,占用内存大小等于文件大小。优化思路是尽量复用字体,减少使用差异化字体。
13.jpg


14.jpg




  三、效果举例。

  经过先前安装包瘦身,已减少几十MB贴图资源占用内存。

  又依照上述方法优化,包括缩减资源尺寸(红色)、卸载过时资源(绿色)、整合字体(橙色),进一步又减少了约26MB内存占用。

15.jpg


  相关阅读unity开发安卓游戏行性能优化经验分享

via: Gad-腾讯游戏开发者平台

0

主题

3

帖子

228

积分

中级会员

Rank: 3Rank: 3

积分
228
发表于 2016-1-25 09:55:08 | 显示全部楼层
好东西,顶起!!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-2-25 11:13

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表