概述(Overview)
DebugExtensions 是一个简单的 Unity 调试日志控制类,位于 PFGameFramework.Library 命名空间。
主要功能:
- 通过一个统一的开关(debugOnOff)控制所有 Debug.Log、Debug.LogWarning、Debug.LogError 的输出
- 避免在正式发布版本中输出大量调试日志(尤其在移动端或性能敏感场景)
- 提供带前缀的日志格式,便于在控制台中快速区分
- 调试期间开启,部署/发布时关闭
该类采用 MonoBehaviour + 静态方法 的设计模式:
- 在场景中挂载一个 GameObject 并设置 debugOnOff 开关
- 其他脚本通过静态方法 DebugExtensions.Log 等调用
典型使用场景:
- 开发阶段开启日志
- 提测/发布时关闭所有调试输出
- 统一管理日志格式,便于筛选和排查
组件属性
| 属性名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| debugOnOff | bool | true | 是否开启调试日志(Inspector 可视化开关) |
静态方法一览(API Index)
| 方法名 | 静态 | 参数类型 | 功能 | 典型用法 |
|---|---|---|---|---|
| Log | 是 | object | 输出普通日志(带“输出内容:”前缀) | 常规调试信息 |
| LogWarning | 是 | object | 输出警告日志(带“输出警告:”前缀) | 可能有问题但不致命的情况 |
| LogError | 是 | object | 输出错误日志(带“输出错误:”前缀) | 严重错误、异常情况 |
方法详情
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. 挂载方式(推荐)
-
在场景中创建一个空 GameObject(建议命名为 DebugController)
-
将 DebugExtensions 脚本挂载到该物体上
-
在 Inspector 中设置 debugOnOff 开关
- 开发/调试时:勾选(true)
- 打包/发布时:取消勾选(false)
// 任意脚本中调用
DebugExtensions.Log("当前帧率:" + (1f / Time.deltaTime));
2. 全局开关控制
debugOnOff 只在 Awake 时读取一次,存储在静态字段 _openDebug 中。
如果需要在运行时动态开关,可以直接修改静态字段:
DebugExtensions._openDebug = false; // 运行中关闭日志(不推荐频繁改)
注意:_openDebug 是 private static,建议通过暴露公共方法来控制开关(如 SetDebugEnabled(bool))。
改进建议
当前实现较为基础,可考虑以下增强:
- 添加开关控制方法
public static void SetDebugEnabled(bool enabled)
{
_openDebug = enabled;
}
- 支持日志标签/分类
public static void Log(object message, string tag = "Default")
{
if (_openDebug)
Debug.Log($"[{tag}] {message}");
}
- 支持条件编译
#if UNITY_EDITOR || DEVELOPMENT_BUILD
public static void Log(object des) { ... }
#else
public static void Log(object des) { }
#endif
- 集成第三方日志系统(如 Serilog、Log4Unity 等)
- 添加颜色/富文本支持
DebugExtensions.Log("<color=yellow>重要信息</color>");