Debug.Log() 速度太慢无法快速输出大量变量

Debug.Log() is too slow to output a lot of variables quickly

我习惯于在 Java 中将变量输出到控制台,这是一种快速而肮脏的调试方式,并且经常向我展示我的代码有什么问题。不幸的是,在 Unity 中使用 Debug.Log 会以某种方式占用大量资源。我目前在大约 80 毫秒内生成一个简单的地图,但由于存在一些问题我只想输出一些变量,现在这使得我的地图在一两分钟内生成。在更新方法中执行类似的操作会使 Unity 无响应并且可能在不保存场景编辑的情况下崩溃。

Debug.Log() 在 Unity 中非常慢,如果您以高速率(例如在循环中)打印数据,确实会影响性能。问题的很大一部分是生成这些消息的所有额外处理 - 除了将给定值转换为字符串(对性能的影响可以忽略不计)之外,它还必须生成堆栈跟踪,因此它可以 link 返回到发生日志记录的代码行(参见此 Unity Answer),这是相对较慢的。

在游戏中,创建游戏内调试输出是一种常见的做法(想想 Bethesda 游戏中的控制台,您可以在其中查看游戏事件并输入开发人员命令)。通过将需要输出的文本写入输出显示来跳过 Debug.Log() 的开销可以节省大量处理能力,还可以让您在移动设备上更轻松地查看调试输出。

这里最简单的解决方案(只是不那么频繁地记录日志)是创建一个 Canvas 对象,向其中添加一个 Text 对象作为调试输出,然后添加一个脚本很少有静态方法可以附加到 Text 内容,因此您可以从代码中的任何位置引用它们(并写入您的显示器)。

或者,如果文本太快 lengthy/generated 太快而无法实时读取,您可以定期将输出写入文件,然后在代码运行后查看它。