在软件中操作错误或者先前测试,通常按 ctrl+z 可撤回至上一次历史,这时软件存在崩溃也是有可能的,在 Unity 中也不例外,通常该情况会失去对项目的保存机会,会有点无奈。

因为 Unity 是一个功能齐全的游戏软件,在工作的过程会访问特定的功能区域进行操作,所以按 ctrl+z 撤销操作不会只局限于哪个模块,有可能是在添加预制件过程中,也有可能在 Inspector 编辑内容属性和设置中撤销崩溃,因此需要从以下内容中获取解决故障排除的思路。
Unity是否存在BUG?
众所周知 Unity 为我们提供了功能齐全的游戏开发功能,因此在工程师开发过程难免会存在一些小遗漏,或许会通过“认为”等主观因素判断而省略掉某些行动。
如果遇到崩溃,通常从官方的更新日志中或许可以得到一些回答,例如你当前使用的是 2019.1.0f,那么前往官方在下一个版本(例如 2019.2.1f)更新日志中寻找一些蛛丝马迹。

官方的日志很正规,如果该版本下的某个模块存在 BUG,则会标记该模块的关键字并会说明崩溃的因果关系。
存在撤销崩溃的BUG版本
这里3D天堂网从官方整理的一些 Unity 版本存在撤销操作已知崩溃问题,其他方面的崩溃不涉及,可以从下面的表格中查看一下或许可以对号入座。
2021.3.9f1,2022.2.0b7,2023.1.0a9(在 2021.3.12f1 中修复) |
撤消游戏对象复制时,编辑器崩溃。 |
2022.1.0a12,2022.1.0b1,2021.3.10f1 |
在Hierarchy、Inspector窗口撤消操作(撤消创建子项) 崩溃。 |
5.0.0f4 |
编辑器在撤消时崩溃。 |
2019.1.0a12、2018.3.0f1、2018.3.0a10 |
撤消后在 ATOMICLIST::LOAD 上崩溃。 |
5.5.0f3 |
还原已删除刚体和关节的预制件然后撤消还原时崩溃。 |
2018.1.0a1,2018.3.0a1,2018.3.0f2,2019.1.0a1,2019.2.0a1 |
调用 UNDO.REGISTERCOMPLETEOBJECT(OBJECT, NAME) 后撤消时在 OBJECTUNDO::RESTORE 上崩溃。 |
2018.1.0a7、2018.1.0a5、2018.1.0b1 |
编辑器创建非空子游戏对象后撤消崩溃。 |
2018.3.0a9,2018.3.0f2(已在 2018.3.X、2019.1.X,2019.2.X 中修复) |
尝试对升级的断开连接的预制撤消“应用”操作时崩溃。 |
2018.3.0a1,2018.3.0a5 |
在时间线中录制动画时,编辑器在点击撤消时崩溃。 |
2019.3.0f3(已在 2020.1.X,2019.3.X 中修复) |
序列化在 SERIALIZEDREFERENCE 对象的预制件中应用更改后按下撤消时编辑器崩溃。 |
2021.3.9f1,2022.2.0b10,2023.1.0a14 |
撤消粘贴为 UI 元素的子元素会导致编辑器崩溃。 |
2022.1.17f1,2022.2.0b8,2023.1.0a11 |
撤消添加到层次结构的精灵时,UPDATESINGLERENDERER 崩溃。 |
2018.3.0a6,2018.3.0a8(已在 2020.1.X,2019.3.X 中修复) |
如果对象有布料,则在撤消和重做添加组件时崩溃。 |
2021.2.3f1(在 2022.1.X, 2022.2.X 中修复) |
撤消脚本实例化预制件后崩溃。 |
2020.2.0a16,2020.2.0b1 |
CONVERT TO PREFAB 操作撤销编辑器崩溃。 |
2020.2.0a16,2021.1,2021.1.0a9(在 2020.3.X 中修复) |
使用 LEGO 模型资产组件复制游戏对象后执行撤消和重做时编辑器崩溃。 |
2017.2.0b1(在 2017.3.0f3,2017.2.1x 中修复) |
UNITY 在删除粒子系统并撤消它后崩溃、 |
2020.2.0a15,2020.2.0b4(已在 2020.2.X 中修复) |
2D使用 TILE PALETTE 执行撤销操作时编辑器崩溃。 |
2021.2.3f1,2021.2.13f1 |
将 TILEMAP 添加到列表后使用撤销时出现崩溃。 |
2017.1.0b1 |
在时间轴中撤消创建轨道时崩溃。 |
2018.4,2019.4,2020.1,2020.3,2021.1,2021.2,2021.2.0a11 |
重新排序混音器快照和撤消时编辑器崩溃。 |
2017.1.0p4(已在 2018.1.X 中修复) |
在层次结构窗口中编辑两个场景并在不保存的情况下删除一个场景后撤消更改时崩溃。 |
2017.1,2017.2.1f1(已在 2017.4.X 中修复) |
在带有 UI 组件的预制件上按住 UNDO 会导致编辑器崩溃。 |
2017.2.0b8(在 2017.3.0f3 和 2017.2.X 中修复) |
撤消删除作为预制件一部分的 UI 对象时,UNITY 崩溃。 |
2017.1.1f1(已在 2018.1.X,2017.1.2X、2017.2.X 中修复) |
布料撤消由布料组件崩溃编辑器完成的网格移除。 |
2018.2.0b6,2018.2.5f1 |
撤消 SPRITE MASK 对象的创建时,编辑器崩溃。 |
查看日志文件
Unity 中的控制台为编辑器生成一些错误、警告等文本输出消息,这些错误和警告可帮助大家在开发项目的过程发现存在的已知问题冰做出修正,不过这些输出信息通常不会在执行撤销过程直接让软件至崩溃的地步,除非让软件忍无可忍了。

不过在 Unity 软件崩溃后,如果立马打开软件,则也会看到一行解释崩溃日志信息的存储位置。
在 Win 上,日志文件通常放置在 AppData 文件夹中。
例如这样:C:\Users\Administrator\AppData\LocalLow\Unity… ***.log
MacOS 苹果系统放置在 Logs 文件夹当中。
例如这样:~/Library/Logs/Unity/***.log
Linux 放置在 config 文件夹当中。
例如这样: ~/.config/unity3d/***.log
本文总结
其实系统硬件、脚本编辑、着色器、阴影、图形驱动等因素也会让软件存在崩溃的可能,因为从经验上讲撤销崩溃涉及到这几个方面的比例真不大,因此在这没必要讨论,当然你可以当做这是一个建议一个方向。
不管是软件还是操作不当导致逻辑崩溃,建议大家对照更新日志以及输出日志来判断撤销崩溃的解决方案,只有通过查看俩者的日志来了解应用程序是否存在 BUG 以及软件打开到关闭的过程所发生的问题,因此学会查看日志是相当有必要的。
最后…
如很确信这是一个软件的 BUG,又不记得撤销了啥子导致崩溃,可以直接打开崩溃报告上传给 Unity 官方,通常会有工程师测试,如果是软件存在 BUG 则会在将来的版本进行修复,就像上面所列出来的撤销崩溃的版本,后面列出了修复版本就是官方做出的回应。