- 最后登录
- 2019-12-25
- 注册时间
- 2012-8-24
- 阅读权限
- 90
- 积分
- 71088
- 纳金币
- 52336
- 精华
- 343
|
UI的实现原理大同小异,无非就是很多散图打成一张图集,配合每张散图在图集中的坐标信息文件来获取,因为图片在内存中是以2的幂次方大小开辟的,所以UI占用内存最大的也是图集。
Unity从4.6版本之后已经为我们提供了依赖打包的接口,这就省去了项目打包前自己实现的引用检测步骤。
依赖打包如何操作具体我就不在这里赘述,网上有很多规范例子。
在这里我只说一下以NGUI为例的一个值得注意的地方。
如果大家要实现atlas的引用,在打依赖包时,要先将UIAtlas这个脚本做依赖打包,因为它是公用的(我拿到这里说是觉得很容易让人忽视)。
其次Atlas的material上的shader也是需要打依赖包的。当然,如果你的项目里使用了支持法线反射的shader也是需要打依赖包。
我在项目里写了一个查找其所有UI引用的atlas的脚本,还包括字体。将写好的数据以json格式保存到项目中。
在项目启动时,读取引用数据。
当加载一个UI时,会通过这个UI去引用数据中查找其引用的所有atlas和font。如果没有在内存中则去加载,反之则只是添加引用计数。
销毁时则减少引用计数。
随后的内存管理大家可以按需定制,比如时间消亡法或超内存阈值强制回收等。
大家如果有更好的建议和意见欢迎评论!
|
|