纳金网

标题: 【转】Unity中关于UI内存管理的一种解决方案 [打印本页]

作者: may    时间: 2016-2-21 08:38
标题: 【转】Unity中关于UI内存管理的一种解决方案

UI的实现原理大同小异,无非就是很多散图打成一张图集,配合每张散图在图集中的坐标信息文件来获取,因为图片在内存中是以2的幂次方大小开辟的,所以UI占用内存最大的也是图集。
Unity从4.6版本之后已经为我们提供了依赖打包的接口,这就省去了项目打包前自己实现的引用检测步骤。
依赖打包如何操作具体我就不在这里赘述,网上有很多规范例子。

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

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

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

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

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

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

销毁时则减少引用计数。

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

大家如果有更好的建议和意见欢迎评论!






欢迎光临 纳金网 (http://rs.narkii.com/club/) Powered by Discuz! X2.5