博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Assetbundle相关问题及使用优化技巧
阅读量:4147 次
发布时间:2019-05-25

本文共 1096 字,大约阅读时间需要 3 分钟。

摘录自侑虎科技

侑虎科技的技术贴子都很不错,建议大家去看看,创始人-张鑫 也是很牛的,斗鱼有开过公开课

资源管理

Q1:打包AssetBundle的时候,我发现切换场景时,即使打同一个场景的AssetBundle,它们的Hash值都是不一样的,可能是什么原因造成的呢?

在不同的场景下打包同一个资源或场景时,如果出现AssetBundle的差异,目前很可能是Shader Stripping造成的,其原理可见文档:

简单来说就是根据当前场景对Shader进行简化,因此如果打包时包含的场景的Lightmap或Fog设置不同,打出来的AssetBundle包也有可能是不同的。可以尝试通过把Graphics Settings中的Shader Stripping设置进行修改来避免这个问题。

资源管理

Q2:当UI关闭后,Texture图片却还留在内存,是下次垃圾回收或者Resources.UnloadUnusedAssets调用的时候就会清除吗?如果想立即清除,该如何操作?

垃圾回收并不会卸载内存中的资源,而Resources.UnloadUnusedAssets是可以的,但前提是纹理资源已经不再被其他Object引用。如果要立即清除,可以尝试直接调用Resources.UnloadAsset来进行卸载。

资源管理

Q:我有一个关于AssetBundle资源加密问题。CreateFromMemory这里不推荐大规模使用,那是不是我们要放弃对一部分资源的加密?还是说有其它的解决办法?

由于CreateFromMemory的加载速度相较其他的接口而言,耗时明显增大,因此我们确实不建议大规模使用。就目前而言,除了使用CreateFromMemory,并没有其他高效直接的方法进行资源加密,因此,确实需要放弃对一部分资源的加密。同时,目前存在一些工具可以从更底层的方式来获取和导出渲染相关的资源,如纹理、网格等,因此,对于这部分的资源加密并没有十分的必要性。

Q:我想确认一下Shader的依赖打包问题。如果采用了依赖打包,A、B、C依赖了D,当我更新了D包时,A、B、C是否都要重新打包?反过来呢?

在使用Unity 4.x的接口时开启DeterministicAssetBundle,或者使用Unity 5.x新接口(默认强制开启DeterministicAssetBundle)时,当更新了D包,都是不需要重新打包A、B和C的。
反之,如果更新了(比如B包),那么在Unity 4.x 下依然是需要重新打D包的,而Unity 5.x新接口则会检测到D包未更新,而自动跳过其打包过程。

转载地址:http://kljti.baihongyu.com/

你可能感兴趣的文章
常用js收集
查看>>
如何防止sql注入
查看>>
springmvc传值
查看>>
在Eclipse中查看Android源码
查看>>
Android使用webservice客户端实例
查看>>
[转]C语言printf
查看>>
C 语言学习 --设置文本框内容及进制转换
查看>>
C 语言 学习---判断文本框取得的数是否是整数
查看>>
C 语言 学习---ComboBox相关、简单计算器
查看>>
C 语言 学习---ComboBox相关、简易“假”管理系统
查看>>
C 语言 学习---回调、时间定时更新程序
查看>>
C 语言 学习---复选框及列表框的使用
查看>>
第十一章 - 直接内存
查看>>
JDBC核心技术 - 上篇
查看>>
一篇搞懂Java反射机制
查看>>
Single Number II --出现一次的数(重)
查看>>
Palindrome Partitioning --回文切割 深搜(重重)
查看>>
对话周鸿袆:从程序员创业谈起
查看>>
Mysql中下划线问题
查看>>
Xcode 11 报错,提示libstdc++.6 缺失,解决方案
查看>>