BuildAssetBundleOptions.DisableWriteTypeTree参数导致AssetBundle在Editor加载时闪退
问题
- 从AssetBundle中加载Asset时出现"The file ‘archive:/CAB-… is corrupted.’Remove it and launch unity again![Position out of bounds!]" 如下图
解决方法
- 在打ab的时候使用BuildAssetBundleOptions.DisableWriteTypeTree这个选项,也会导致编辑器加载部分安卓 AssetBundle出现这个错误。将BuildAssetBundleOptions.DisableWriteTypeTree更改为BuildAssetBundleOptions.IgnoreTypeTreeChanges,即可避免这个问题。目前遇到的是TextMeshPro插件代码引起的,原因是TMP插件Editor下,会读取资源后进行反序列化,如果用DisableWriteTypeTree打包出来的ab,会导致反序列化失败,从而导致Editor崩溃。这个资源仅在Editor下会使用,所以在UnityEditor下才会导致崩溃。
深入拓展
-
BuildAssetBundleOption.DisableWriteTypeTree
在Unity 5.x版本中,AssetBundle在制作时会默认写入TypeTree信息(对应IgnoreTypeTreeChanges),这样做的好处是可以保证AssetBundle文件的向下兼容性,即高版本可以支持以前低版本制作的AssetBundle文件。但是在5.x以上的版本,Unity支持我们可以选择关闭TypeTree的信息,优点如下:
-
DisableWriteTypeTree能够减小包体的大小
LZMA格式下,大小差了3K。-
DisableWriteTypeTree能够减少内存占用
图一图二分别是开启eWriteTypeTree和关闭eWriteTypeTree,两者在内存上相差16k,而ab内只有一个小预制体。 -
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2022-03-27 游戏性能保障体系