技术分享连载(二十一)-阿里云开发者社区

开发者社区> 人工智能> 正文
登录阅读全文

技术分享连载(二十一)

简介:

资源管理

Q1:Resources.UnloadUnusedAssets() 不仅局限于Resources.Load的资源,还包括AssetBundle.Load的资源,是吗?

是的,Resources.UnloadUnusedAssets同样可以卸载由AssetBundle.Load加载的资源,只是前提是其对应的AssetBundle已经调用Unload(false),且并没有被引用。


资源管理

Q2:如果采用依赖打包的话,比如NGUI,图集A作为被依赖包,界面1、2、3作为独立包,分别依赖打包。当图集A重新打包的时候,是不是界面1、2、3也都要重新打包?目前我们是界面打包时清空全部的图集信息再打包,在客户端加载后再动态赋值回来。这样可以实现单独更新图集,但是代价就是加载的性能。请问有什么更好的解决方案呢?

“当图集A重新打包的时候,是不是界面1、2、3也都要重新打包”,这是不需要的,Unity 4.x的依赖打包的限制在于,在重新打一个包时需要将它依赖的包都重新打一次,但不需要重打依赖它的包。


资源管理

Q3:关于Static Batching, 场景中物件组合成大的Mesh,那么判断子Mesh要合入大的Mesh中的依据是什么?材质?勾选Static?
UWA Tech Doc
我有一个模型A并勾选Static,使用材质A,怎么看到也和其他材质的Mesh合并到一块去了(Combined Mesh)?
UWA Tech Doc
UWA Tech Doc

勾选Static的GameObject下的Mesh都会被合入CombineMesh(无论什么材质),且每个Mesh都作为SubMesh存在。在Unity 5.3之前,对于渲染顺序相邻且材质相同的SubMesh则会动态将其索引数组拼合,从而合成一个Draw Call。而Unity 5.3之后则不再拼合索引数组,因为在不切换材质时产生多个Draw Call的开销并不大,而这多个Draw Call会被统计为一个Batch。


UI输入

Q4:UGUI的图集操作中我们有这么一个问题,加载完一张图集后,使用这个方式获取其中一张图的信息:assetBundle.Load (subFile, typeof (Sprite)) as Sprite; 这样会复制出一个新贴图(图集中的子图),不知道有什么办法可以不用复制新的子图,而是直接使用图集资源 。
UWA Tech Doc

经过测试,这确实是 Unity 在 4.x 版本中的一个缺陷,理论上这张“新贴图(图集中的子图)”是不需要的,并不应该加载。 因此,我们建议通过以下方法来绕过该问题:

在 assetBundle.Load (subFile, typeof (Sprite)) as Sprite; 之后,调用
Texture2D t = assetBundle.Load (subFile, typeof (Texture2D)) as Texture2D;
Resources.UnloadAsset(t);
从而卸载这部分多余的内存。


UI输入

Q5:UGUI里的这个选项 ,应该是ETC2拆分Alpha通道的意思,但是在使用中并没起作用?请问有没有什么拆分的标准和特别要求呢?
UWA Tech Doc

据我们所知,目前 alpha split 的功能只对 Unity 2D 的 Sprite(SpriteRenderer)有完整的支持,而UI的支持仍在进行中。因此暂时我们不建议大家在 UGUI中尝试该功能。





原文出处:侑虎科技
转载请与作者联系,同时请务必标明文章原始出处和原文链接及本声明。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: