封装系统自带的Debug
Unity3d的Debug.Log函数用于打印日志,一般项目中都会对其作如下两件事情:
(1)希望有一个总的开关来控制整个游戏中日志的打印与否;
(2)有的系统会将Log封一层并添加统一的标记,比如Skill模块希望打印的日志格式为[Skill]***。
对于第一个问题,Unity没有统一的开关用于控制日志的输出。对于第二个问题,将Log用一个函数封一层,那么在调试的时候双击Console里面的堆栈时将不能跳转到相应的逻辑块,很麻烦。
怎么解决呢,有一个办法,就是将Debug.Log封装进一个DLL,话不多说代码如下所示:
using System;
using UnityEngine; namespace MyDebug
{
public class Debug
{
static public bool Enable = false;
static public void Log(object message)
{
Log(message, null);
}
static public void Log(object message, UnityEngine.Object context)
{
if (Enable)
{
UnityEngine.Debug.Log(message, context);
}
}
static public void LogWarning(object message)
{
LogWarning(message, null);
}
static public void LogWarning(object message, UnityEngine.Object context)
{
if (Enable)
{
UnityEngine.Debug.LogWarning(message, context);
}
}
static public void LogError(object message)
{
LogError(message, null);
}
static public void LogError(object message, UnityEngine.Object context)
{
if (Enable)
{
UnityEngine.Debug.LogError(message, context);
}
}
public static void LogException(Exception exception)
{
UnityEngine.Debug.LogException(exception);
}
public static void LogException(Exception exception, UnityEngine.Object context)
{
UnityEngine.Debug.LogException(exception, context);
}
public static void DrawLine(Vector3 start, Vector3 end)
{
UnityEngine.Debug.DrawLine(start, end);
}
public static void DrawLine(Vector3 start, Vector3 end, Color color)
{
UnityEngine.Debug.DrawLine(start, end, color);
}
public static void DrawLine(Vector3 start, Vector3 end, Color color, float duration)
{
UnityEngine.Debug.DrawLine(start, end, color, duration);
}
public static void DrawLine(Vector3 start, Vector3 end, Color color, float duration, bool depthTest)
{
UnityEngine.Debug.DrawLine(start, end, color, duration, depthTest);
}
public static void DrawRay(Vector3 start, Vector3 dir)
{
UnityEngine.Debug.DrawRay(start, dir);
}
public static void DrawRay(Vector3 start, Vector3 dir, Color color)
{
UnityEngine.Debug.DrawRay(start, dir, color);
}
public static void DrawRay(Vector3 start, Vector3 dir, Color color, float duration)
{
UnityEngine.Debug.DrawRay(start, dir, color, duration);
}
public static void DrawRay(Vector3 start, Vector3 dir, Color color, float duration, bool depthTest)
{
UnityEngine.Debug.DrawRay(start, dir, color, duration, depthTest);
}
public static void Break()
{
UnityEngine.Debug.Break();
}
public static void ClearDeveloperConsole()
{
UnityEngine.Debug.ClearDeveloperConsole();
}
public static void DebugBreak()
{
UnityEngine.Debug.DebugBreak();
}
}
}
在游戏中有两种用法:
using Debug = MyDebug.Debug;
然后用法和默认的一样,或者直接使用:
MyDebug.Debug.Log("something");
同样的,对于第二个问题,可以将Skill系统的Log进行类似的封装:
using System;
using System.Collections.Generic;
using System.Text; namespace MyDebug
{
public class SkillDebug
{
public static bool Enable = true; static public void Log(object message)
{
Log(message, null);
}
static public void Log(object message, UnityEngine.Object context)
{
if (Enable)
{
Debug.Log("<color=green>[SKILL]</color>---" + message, context);
}
}
static public void LogWarning(object message)
{
LogWarning(message, null);
}
static public void LogWarning(object message, UnityEngine.Object context)
{
if (Enable)
{
Debug.LogWarning("<color=blue>[SKILL]</color>---" + message, context);
}
}
static public void LogError(object message)
{
LogError(message, null);
}
static public void LogError(object message, UnityEngine.Object context)
{
if (Enable)
{
Debug.LogError("<color=red>[SKILL]</color>---" + message, context);
}
} }
}
注意,在编译库文件的时候,需要手动地设置工程属性中的目标框架,如下图所示:

将上述代码编译到MyDebug.dll中,并将此dll放入到游戏工程,那么就可以在游戏中自由使用Log功能,并且有统一开关来控制是否打印日志,而且可以进行直接的堆栈跳转了。
封装系统自带的Debug的更多相关文章
- app整体搭建环境:tabBar切换不同控制器的封装(自定义导航+自定义uiviewcontroler+系统自带tabbar+自定义tabbarController)
首先,一个app的搭建环境非常重要.既要实现基本功能,又要考虑后期优化的性能. 现在很多应用不仅仅是系统自带的控制器,由于需求复杂,基本上需要自定义多控制器来管理. 新建一个BasicNavigati ...
- iOS-tabBar切换不同控制器封装(自定义导航+自定义uiviewcontroler+系统自带tabbar+自定义tabbarController)
首先,一个app的搭建环境非常重要.既要实现基本功能,又要考虑后期优化的性能. 现在很多应用不仅仅是系统自带的控制器,由于需求复杂,基本上需要自定义多控制器来管理. 新建一个BasicNavigati ...
- android学习笔记50——SQLiteOpenHelper、android实现系统自带样式
SQLiteOpenHelper SQLiteOpenHelper是android提供的一个管理数据库的工具类,可用于管理数据库的创建和版本更新. 一般的用法是创建SQLiteOpenHelper的子 ...
- 系统自带的日志管理工具-rsyslogd
系统自带的日志管理工具-rsyslogd 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.日志管理简介 1.什么是日志 系统日志是记录系统中硬件.软件和系统问题的信息,同时还可以 ...
- centos tomcat/resin安装配置 卸载系统自带的java tomcat安装配置 安装JDK resin安装配置 第二十八节课
centos tomcat/resin安装配置 卸载系统自带的java tomcat安装配置 安装JDK resin安装配置 第二十八节课 tomcat和java都不需要编译 tom ...
- Notepad2替代系统自带的记事本
事情是这样的,平时我经常把一些文字复制到记事本中编辑好了再复制到目标位置,可以在系统自带的记事本中替换删除一些内容,记事本小巧,占用很少的资源,我很喜欢:但今天复制的内容中有很多数字和一些我不想要的内 ...
- 如何获取安卓系统自带应用的package和activity
之前在做appium自动化测试的时候,参考网上的例子,运行安卓系统自带的app,所以,就需要获取系统自带的package(包名)和activity.这里简单记录一下,不一定适合所有的系统应用. 运行环 ...
- 重装系统后如何删除系统自带的office2003
背景:操作系统重装后,系统自带的office2003版本太低不好使用,需要安装更高版本的如2010,但是卸载时提示“无法打开此修补程序包……”,从而无法卸载.经网上查询,采用以下解决办法: 在注册表中 ...
- C语言中使用系统自带的快排函数
题目 . 德才论 () 宋代史学家司马光在<资治通鉴>中有一段著名的"德才论":"是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人.凡取 ...
随机推荐
- 一步一步写miscdevice的驱动模块
(本文使用的平台为友善tiny210SDKv2) 对于linux的驱动程序来说,主要分为三种:miscdevice.platform_device.platform_driver . 这三个结构体关系 ...
- C# 热敏打印机 Socket 网络链接 打印 图片
C# 热敏打印机 Socket 网络链接 打印 图片 (一) http://www.cnblogs.com/rinack/p/4838211.html C# 热敏打印机 Socket 网络链接 打印 ...
- 修復jquery的tablesorter对加了千分位的数字无法正确排序的bug
找到函数: function getElementText(config, node) { var text = ""; if (!node) return "" ...
- loadlibrary DLL 0失败 的一个原因。
加载DLL失败,因为 dll 中有一个全局类变量,由于在构造函数 没有初始化变量,导致 初始化 失败 异常. C++ 变量没有初始值,全部都要 手动赋值 为 0 的这个特性 还真是烦人呢...
- Number Range 管理之并行缓冲
Number Range 管理之并行缓冲: 常用的事务代码SNRO,SM56还有一些业务专用的号码管理,可以在SPRO中查找: SNRO :Number Range 管理 一般的操作是维护号码范围.如 ...
- C/C++在Java项目、Android和Objective-C三大平台下实现混合编程
Android和iOS开发都支持C++开发,可以一套代码多平台使用.同时C++难以反编译的特性也可以为Android开发带来代码的保密,另一native特性也可以提高代码的运行效率. 一.为什么使用C ...
- 如何判断平台工具集去做条件编译(VC++目录、预处理器定义、$(PlatformToolsetVersion))
作者:zyl910 从VS2010开始,提供了一个平台工作集(Platform ToolSet)选项用于配制vc编译版本.到了VS2012,更是因为默认平台工具集不支持WindowsXP,导致经常需要 ...
- 使用6to5,让今天就来写ES6的模块化开发!
http://es6rocks.com/2014/10/es6-modules-today-with-6to5/?utm_source=javascriptweekly&utm_medium= ...
- Javascript中使用WScript.Shell对象执行.bat文件和cmd命令
WScript.Shell(Windows Script Host Runtime Library)是一个对象,对应的文件是C:/WINDOWS/system32/wshom.ocx,Wscript. ...
- Android 5.0 双卡信息管理分析
首先,如前面的博文所讲的,Android5.0开始支持双卡了.另外,对于双卡的卡信息的管理,也有了实现,尽管还不是完全彻底完整,如卡的slot id, display name,iccid,color ...