栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

随笔-Unity部分版本加载AB资源时崩溃问题

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

随笔-Unity部分版本加载AB资源时崩溃问题

        首先描述一下崩溃的现象:

        因为之前使用的版本一直都是Unity2020.3.0(LTS),是一个相对稳定的版本,后来因为想尝试一下新版本的一些新特性,就讲Unity升级到了2021.2.7,但在后面的使用过程,发现新版的Unity总是在导出资源之后(生成AB包)的第一次运行后崩溃,再次运行依旧崩溃,只有重新导出一次资源再运行之后就不会出现崩溃问题。虽然打出的apk包之后真机运行并没有什么问题。但是这种总崩溃的现象总是让人觉得很难受,所以我开始排查这个奔溃出现的原因。(下图为崩溃弹窗)

         

        问题排查过程:

         根据现象可知问题出现在AB资源换加载时候,尝试在一个空项目中做一个简单的预制,其中只存放一个简单的Cube然后导出AB资源-->加载,并未出现崩溃现象。那就证明加载的逻辑代码是没有问题的,问题出现在AB资源上。

        接着开始定位是哪个组件出了问题,将需要导出的资源通过对半删的方式去挨个导出资源-->加载,最终定位到TextMeshPro这个组件上,当你的AB资源中有这个组件时,就会出现崩溃的现象。至此问题已定位。

        问题解决:

         首先给出解决办法:

  1.  因为问题出现在TextMeshPro这个组件上,最简单暴力的解决方法就是换掉它,不再使用TextMeshPro这个组件,当然这并不是最好的解决办法。
  2. 首先找到PackagesTextMeshProScriptsRuntimeTMP_FontAsset.cs脚本,找到一下代码的位置,将[SerializeField]修改为[NonSerialized],让其不可序列化。
   #if UNITY_EDITOR
        /// 
        /// Persistent reference to the source font file maintained in the editor.
        /// 
        [SerializeField]
        internal Font m_SourceFontFile_EditorRef;
    #endif

        这么修改的原因通过对资料的查阅得知是因为打包参数TypeTree导致的,因为插件中将m_SourceFontFile_EditorRef这个对象设定为了可序列化,但是又放入了 #if UNITY_EDITOR的宏编译中,所以在编辑器下运行时没有TypeTree信息,反序列化失败,直接导致了崩溃。

        下面的链接是在一个论坛中找到的问题说明及解决办法:

         链接地址:https://www.cnblogs.com/ogaligong/p/15632366.html

        (机翻加网络问题,所以看的比较费劲)

        链接地址:https://issuetracker.unity3d.com/issues/loading-textmesh-pro-prefab-from-assetbundle-crashes-editor-when-buildassetbundleoptions-dot-disablewritetypetree-option-is-used

        链接地址:https://answer.uwa4d.com/question/616a8e668f8c834241dfd78b

 

        最后的说明:其实我对第二种解决方式还是持有一定的观望态度,毕竟官方并没有给出这个问题的明确答复,及解决办法。但是通过这个办法确实解决了实际问题,还需要更多的试验测试去验证。如果大家的项目中用不太到TextMeshPro这个组件,建议大家去更换这个组件是最安全的解决办法。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/901456.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号