L J Z
0 1

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的信息,优点如下:

    1. DisableWriteTypeTree能够减小包体的大小


    LZMA格式下,大小差了3K。

    1. DisableWriteTypeTree能够减少内存占用



    图一图二分别是开启eWriteTypeTree和关闭eWriteTypeTree,两者在内存上相差16k,而ab内只有一个小预制体。

  • 参考资料
    UWA问题DisableWriteTypeTree描述

posted @   小小钊  阅读(884)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2022-03-27 游戏性能保障体系
点击右上角即可分享
微信分享提示