Version: 6000.3
语言: 中文
调试故障排除
日志文件参考

Debug 类

切换到脚本

Debug 类允许您在 Unity 编辑器中可视化信息,这些信息可能有助于您了解或调查项目在运行时发生的情况。例如,您可以使用它将消息打印到控制台窗口中,在场景场景包含游戏的环境和菜单。将每个唯一的场景文件视为一个独特的关卡。在每个场景中,您可以放置环境、障碍物和装饰,实质上是分块设计和构建游戏。更多信息
请参阅术语表
视图和游戏视图,并从脚本在编辑器中暂停游戏模式。

本页概述了 Debug 类及其在编写脚本时的常见用途。有关 Debug 类的每个成员的详尽参考,请参阅 Debug 脚本参考

记录错误、警告和消息

Unity 有时会将错误、警告和消息记录到控制台窗口。 这Debugclass 使您能够从自己的代码中执行完全相同的作,如以下示例所示:

Debug.Log("This is a log message.");
Debug.LogWarning("This is a warning message!");
Debug.LogError("This is an error message!");

这三种类型(错误、警告和消息)在控制台窗口中都有自己的图标类型。

控制台窗口显示三种类型的调试消息:带有白色感叹号图标的常规日志、带有黄色感叹号图标的警告以及带有红色感叹号图标的错误。
控制台窗口显示三种类型的调试消息:带有白色感叹号图标的常规日志、带有黄色感叹号图标的警告以及带有红色感叹号图标的错误。

写入控制台窗口的所有内容(由 Unity 或您自己的代码)也会写入日志文件

如果在控制台中启用了 错误暂停(Error Pause),则通过Debug类导致播放模式暂停。

您还可以为这些日志方法提供第二个可选参数,以指示消息与特定的游戏对象Unity 场景中的基本对象,可以表示角色、道具、风景、相机、航路点等。游戏对象的功能由附加到它的组件定义。更多信息
请参阅术语表
,如下所示:

using UnityEngine;

public class DebugExample : MonoBehaviour
{    void Start()
    {
        Debug.LogWarning("I come in peace!", this.gameObject);
    }
}

这样做的好处是,当您在控制台中单击消息时,与该消息关联的游戏对象将在层次结构中突出显示,从而允许您识别消息与哪个游戏对象相关。在下图中,选择I come in peace!警告消息突出显示 Alien (8) 游戏对象。

控制台窗口显示我平静地来了!作为警告级日志消息。
控制台窗口显示“我平静地来了!

使用 Debug 类

Debug类有两种方法用于在场景视图:您正在创建的世界的交互式视图。您可以使用场景视图来选择和定位场景、角色、摄像机、灯光和所有其他类型的游戏对象。更多信息
请参阅术语表
和游戏视图。这些是DrawLineDrawRay.

在此示例中,已向场景中的每个球体游戏对象添加了一个脚本,该脚本使用Debug.DrawLine表示其与 Y 等于零的平面的垂直距离。请注意,此示例中的最后一个参数是线条在编辑器中保持可见的持续时间(以秒为单位)。

using UnityEngine;

public class DebugLineExample : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        float height = transform.position.y;
        Debug.DrawLine(transform.position, transform.position - Vector3.up * height, Color.magenta, 4);
    }
}

场景视图中的结果如下所示:

场景视图显示一组球体,每个球体都有一条洋红色线,指示其与平面的距离,其中 Y 等于零。
场景视图显示一组球体,每个球体都有一条洋红色线,指示其与平面的距离,其中 Y 等于零。

从非开发版本中排除调试代码

UnityEngine.Debug日志记录 API 不会从发布版本中剥离,并且在调用时写入日志文件。您可以使用以下命令来防止这种情况#if指令或条件属性来编译Debug依赖于仅在开发版本开发版本包括调试符号并启用性能分析器。更多信息
请参阅术语表
.

以下示例使用条件属性,其脚本符号名为ENABLE_LOGS这仅在开发版本中定义:


    public static class Logger {

        [Conditional("ENABLE_LOGS")]
        public static void Debug(string logMsg) {
            UnityEngine.Debug.Log(logMsg);
        }
    }

有关详细信息,请参阅 Unity 中的条件编译

其他资源

调试故障排除
日志文件参考