查看: 602|回复: 0
打印 上一主题 下一主题

[其他] Unity中关于UI内存管理的一种解决方案(转载)

[复制链接]

733

主题

5

听众

1万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
6520
精华
14

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2016-1-29 23:54:18 |只看该作者 |倒序浏览
UI的实现原理大同小异,无非就是很多散图打成一张图集,配合每张散图在图集中的坐标信息文件来获取,因为图片在内存中是以2的幂次方大小开辟的,所以UI占用内存最大的也是图集。
Unity从4.6版本之后已经为我们提供了依赖打包的接口,这就省去了项目打包前自己实现的引用检测步骤。
依赖打包如何操作具体我就不在这里赘述,网上有很多规范例子。

在这里我只说一下以NGUI为例的一个值得注意的地方。

如果大家要实现atlas的引用,在打依赖包时,要先将UIAtlas这个脚本做依赖打包,因为它是公用的(我拿到这里说是觉得很容易让人忽视)。

其次Atlas的material上的shader也是需要打依赖包的。当然,如果你的项目里使用了支持法线反射的shader也是需要打依赖包。

我在项目里写了一个查找其所有UI引用的atlas的脚本,还包括字体。将写好的数据以json格式保存到项目中。

在项目启动时,读取引用数据。

当加载一个UI时,会通过这个UI去引用数据中查找其引用的所有atlas和font。如果没有在内存中则去加载,反之则只是添加引用计数。

销毁时则减少引用计数。

随后的内存管理大家可以按需定制,比如时间消亡法或超内存阈值强制回收等。


分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-9-22 16:44 , Processed in 0.178286 second(s), 28 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部