使用动态网格时 Unity 完整构建崩溃

Unity full build crashes when using dynamic meshes

我正在处理一个 Unity 项目,该项目在编辑器中运行没有问题。然而,我今天去测试了一个完整的 Windows 桌面版本(遗憾的是,我有一段时间没有测试过),但我在桌面上崩溃了。

菜单和加载场景工作正常。崩溃发生在我开始新游戏后-显示游戏场景的初始帧,然后立即发生崩溃。

我正在努力寻找问题的根源。我是 运行 作为开发版本,我正在检查它每次生成的故障转储日志。

错误日志显示:

Read from location 00000175 caused an access violation.

output_log.txt 包含一大堆看起来一切正常的东西,然后突然:

Crash!!!
SymInit: Symbol-SearchPath: '.;F:\Projects\Code\Unity\Pub Demo;F:\Projects\Code\Unity\Pub Demo\Build;C:\WINDOWS;C:\WINDOWS\system32;SRV*C:\websymbols*http://msdl.microsoft.com/download/symbols;', symOptions: 530, UserName: 'Octopoid'
OS-Version: 10.0.10586 () 0x100-0x1
F:\Projects\Code\Unity\Pub Demo\Build\Pub Demo.exe:Pub Demo.exe (00007FF7AAE80000), size: 25665536 (result: 0), SymType: 'PDB', PDB: 'F:\Projects\Code\Unity\Pub Demo\Build\player_win_development_x64.pdb', fileVersion: 5.3.3.3441

(N.B。崩溃日志相当大,所以我没有将它们全部发布 - 如果其中的任何其他部分有帮助,请告诉我。)

我已经尝试在几个地方添加了一个 Debug.Log,看起来一切都在唤醒并且开始没有问题,并且更新循环在这发生之前进行了两次。

但是,该项目相当大,我不知道从哪里开始寻找问题 - 我真的希望有比在每个 Awake/Start/Update/etc 中添加 Debug.Log 更好的方法。

如何找到崩溃的原因?

经过多次痛苦的测试和困惑,最终解决方案非常简单。我的一个脚本正在生成程序网格。 As per the documentation 我在网路上打电话 MarkDynamic():

this.mesh.MarkDynamic();

完成此操作后,设置 mesh.vertices 属性 会导致构建立即崩溃,没有任何特定的错误消息或日志。

无论这个函数在幕后做了什么,问题似乎只影响构建,不影响编辑器。

我试过在实例化之后、设置顶点之前、使用或不使用 Clear() 时进行调用 - 无论我尝试了什么,MarkDynamic() 似乎都会让我的构建崩溃。

我应用的修复只是删除此调用 - 性能似乎与编辑器中的完全相同。


非常感谢@Programmer 帮助您找到这个问题!