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

时间:2017-10-25 18:03:38

标签: c# unity3d logging unity5

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

1 个答案:

答案 0 :(得分:2)

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

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

这里最简单的解决方案(不仅仅是不经常记录)是创建一个Canvas对象,为它添加一个Text对象用于调试输出,然后添加一个带有一些静态的脚本附加到Text内容的方法,以便您可以从代码中的任何位置引用它们(并写入显示内容)。

或者,如果文本过于冗长/生成太快而无法实时读取,则可以定期将输出写入文件,然后在代码运行后进行检查。