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

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

        问题排查过程:

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

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

        问题解决:

首先给出解决办法:

  1. 因为问题出现在TextMeshPro这个组件上,最简单暴力的解决方法就是换掉它,不再使用TextMeshPro这个组件,当然这并不是最好的解决办法。
  2. 首先找到Packages\TextMeshPro\Scripts\Runtime\TMP_FontAsset.cs脚本,找到一下代码的位置,将[SerializeField]修改为[NonSerialized],让其不可序列化。
   #if UNITY_EDITOR/// <summary>/// Persistent reference to the source font file maintained in the editor./// </summary>[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这个组件,建议大家去更换这个组件是最安全的解决办法。

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

  1. Unity之WebGL加载ab包

    一.效果 二.注意事项 网上有好多关于webgl加载ab包的方法,在实际跟随他们写的操作都失败了,最终在踩坑下我总结了webgl加载ab包要注意的三个问题: 1.ab包的创建生成BuildTarget ...

  2. https连接加载http资源

    当https 连接中包含加载http资源时,浏览器会停止加载,UC浏览器console 会打印如下信息: Mixed Content: The page at 'https://Xie.cn/' wa ...

  3. unity3d 自动变化大小_【Unity游戏开发】AB学习(三)--加载AB和实例化操作对应的内存变化...

    了解一下加载AB和实例化操作对应的内存变化,有助于我们更好的理解内存管理 很经典的对称造型,用多少释放多少. 这是各阶段的内存和其他数据变化 说明: 初始状态 AssetBundle.Load文件后 ...

  4. Unity 加载 AB包的缓存问题

    情况 在Unity中,如果重复加载相同的ab包 并且加载包之后没有去将assetbundle unload 或者在assetbundle unload调用几帧内去加载另一个同名的assetbundle ...

  5. unity 通过resouce加载图片_Unity游戏开发笔记-资源管理之资源加载

    资源加载是游戏中非常重要也非常繁琐的的一部分,不合理的资源管理,必定回给游戏的内存带来非常大的压力,尤其是一些重度游戏,不但资源特别多,引用关系特别复杂.维护一个不会内存泄漏而且加载效率高的资源加载框 ...

  6. unity|加载AB包|有依赖关系的AB包

    进阶,异步加载AB包,请看<异步加载有依赖的AB包> 目录 为什么AB包会有依赖关系呢? 步骤 代码 为什么AB包会有依赖关系呢? 例如导入一个预制体的时候,预制体可能有图片,如果只把这个 ...

  7. unity 场景ab包_Unity加载AB包

    Unity制作游戏AB包 需要注意的是在游戏场景运行的情况下,不能编译AB包,不运行的情况下编译AB包需要使用Unity的扩展菜单功能,首先需要建立菜单用来编译AB包. 1.建立AB包的名字,首先选中 ...

  8. win7下计划任务schtasks使用详解及错误:无法加载列资源的解决方法1

    win7下计划任务schtasks使用详解及"错误:无法加载列资源"的解决方法1 2011-12-10 20:33 schtasks 命令简述: 安排命令和程序,使其定期运行或在指 ...

  9. 不加载执行js_前端性能优化:preload 预加载页面资源

    网上看到一篇来自蚂蚁金服数据体验团队的文章,觉得不错,分享给大伙:https://juejin.im/post/5a7fb09bf265da4e8e785c38 本文主要介绍preload的使用,以及 ...

最新文章

  1. 批量残差网络-Aggregated Residual Transformations for Deep Neural Networks
  2. dubbo中使用kryo进行对象序列化,反序列化时报错
  3. vue实现对数据的增删改查(CURD)
  4. Android 数据Parcel序列化过程源码分析
  5. 语言怎么得到直流电压并采样_250V10A高频直流电源/大电流直流稳压稳流电源
  6. [USACO08NOV]奶牛混合起来Mixed Up Cows
  7. Mac如何将DVD转换为MP3格式
  8. 万稞pw80线切割编程软件_模具设计编程培训哪些内容?
  9. 一款简洁大气的个人主页源码
  10. 服务零售全场景,苏宁机器人“分身有术”
  11. 燕无锡计算机学校,第二十七届中国儿童青少年计算机表演赛无锡赛区决赛成绩-无锡少年宫.doc...
  12. 【每日一练:逻辑题】使用一个天平找8个球中其中一个重量不一致的球
  13. echarts图表x轴文字过多时换行显示以及图表画区域背景颜色
  14. 【大四上学期】过程控制系统课程笔记
  15. 解锁一大波涨姿势的小众网站,总有未曾涉足的新大陆
  16. 202107 VMware NSX-T培训笔记2(东西向网段间路由原理)
  17. 【UV打印机】PrintExp打印软件教程(五)-高级
  18. __attribute__((section(”XXXX“)))的编译属性---section
  19. CC00155.bigdatajava——|JavaMySQL.高级.V27|——|MySQL.v28|锁分类|
  20. 基于域控的SSO单点登录

热门文章

  1. 漫谈分子动力学计算热导率的五种方法
  2. css mix-blend-mode图层混合模式(跟ps的功能图层混合模式类似)
  3. Tree Rotations HYSBZ - 2212
  4. 记录两段杀鸡用的牛刀——分钱和算日子……
  5. 批处理文件 bat 后台运行
  6. 电子书转PDF格式怎么弄?这些方法你应该要知道
  7. 手机开发平台的学习指南、教程和资料总结
  8. CyclicBarrier 打造一个安全的门禁系统
  9. 如何高效的碎片化学习
  10. arcgis js平滑线工具_ArcGIS For JavaScript API Drawing Tool —— 绘图工具