DebugExtensions

9 阅读3分钟

概述(Overview)

DebugExtensions 是一个简单的 Unity 调试日志控制类,位于 PFGameFramework.Library 命名空间。

主要功能:

  • 通过一个统一的开关(debugOnOff)控制所有 Debug.Log、Debug.LogWarning、Debug.LogError 的输出
  • 避免在正式发布版本中输出大量调试日志(尤其在移动端或性能敏感场景)
  • 提供带前缀的日志格式,便于在控制台中快速区分
  • 调试期间开启,部署/发布时关闭

该类采用 MonoBehaviour + 静态方法 的设计模式:

  • 在场景中挂载一个 GameObject 并设置 debugOnOff 开关
  • 其他脚本通过静态方法 DebugExtensions.Log 等调用

典型使用场景

  • 开发阶段开启日志
  • 提测/发布时关闭所有调试输出
  • 统一管理日志格式,便于筛选和排查

组件属性

属性名类型默认值说明
debugOnOffbooltrue是否开启调试日志(Inspector 可视化开关)

静态方法一览(API Index)

方法名静态参数类型功能典型用法
Logobject输出普通日志(带“输出内容:”前缀)常规调试信息
LogWarningobject输出警告日志(带“输出警告:”前缀)可能有问题但不致命的情况
LogErrorobject输出错误日志(带“输出错误:”前缀)严重错误、异常情况

方法详情

Log

/// <summary>
/// 输出普通调试信息,仅在 debugOnOff 为 true 时生效
/// 日志格式:输出内容:{内容}
/// </summary>
/// <param name="des">要输出的内容(支持任意对象,会调用 ToString())</param>
public static void Log(object des)

示例

DebugExtensions.Log("玩家血量:" + playerHealth);
DebugExtensions.Log(gameObject);

输出示例(控制台):

输出内容:玩家血量:85
输出内容:Player (UnityEngine.GameObject)

LogWarning

/// <summary>
/// 输出警告信息,仅在 debugOnOff 为 true 时生效
/// 日志格式:输出警告:{内容}
/// </summary>
/// <param name="des">要输出的警告内容</param>
public static void LogWarning(object des)

示例

if (itemCount <= 0)
    DebugExtensions.LogWarning("背包已空,无法使用物品");

输出示例

输出警告:背包已空,无法使用物品

LogError

/// <summary>
/// 输出错误信息,仅在 debugOnOff 为 true 时生效
/// 日志格式:输出错误:{内容}
/// </summary>
/// <param name="des">要输出的错误内容</param>
public static void LogError(object des)

示例

if (target == null)
    DebugExtensions.LogError("目标物体为空,无法移动!");

输出示例(红色):

输出错误:目标物体为空,无法移动!

使用方式

1. 挂载方式(推荐)

  1. 在场景中创建一个空 GameObject(建议命名为 DebugController)

  2. 将 DebugExtensions 脚本挂载到该物体上

  3. 在 Inspector 中设置 debugOnOff 开关

    • 开发/调试时:勾选(true)
    • 打包/发布时:取消勾选(false)
// 任意脚本中调用
DebugExtensions.Log("当前帧率:" + (1f / Time.deltaTime));

2. 全局开关控制

debugOnOff 只在 Awake 时读取一次,存储在静态字段 _openDebug 中。

如果需要在运行时动态开关,可以直接修改静态字段:

DebugExtensions._openDebug = false;  // 运行中关闭日志(不推荐频繁改)

注意:_openDebug 是 private static,建议通过暴露公共方法来控制开关(如 SetDebugEnabled(bool))。


改进建议

当前实现较为基础,可考虑以下增强:

  1. 添加开关控制方法
public static void SetDebugEnabled(bool enabled)
{
    _openDebug = enabled;
}
  1. 支持日志标签/分类
public static void Log(object message, string tag = "Default")
{
    if (_openDebug)
        Debug.Log($"[{tag}] {message}");
}
  1. 支持条件编译
#if UNITY_EDITOR || DEVELOPMENT_BUILD
    public static void Log(object des) { ... }
#else
    public static void Log(object des) { }
#endif
  1. 集成第三方日志系统(如 Serilog、Log4Unity 等)
  2. 添加颜色/富文本支持
DebugExtensions.Log("<color=yellow>重要信息</color>");