Unity Debug Dll 编写

Debug.Log存在的问题

在Unity调试代码的时候,我们经常要用到Debug.Log函数。
    
UnityEngine . Debug . Log ( message ) ;
平时开发的时候需要打印Log,但是出包的时候需要屏蔽掉对应的Log打印。这时候有人或许说了,Unity提供了UNITY_DDITOR编辑器下的宏,我们调用Log函数的时候可以通过添加宏来控制显示。示例如下
    
# if UNITY_EDITOR UnityEngine . Debug . Log ( message ) ; # endif
然后每个地方都这样编写比较麻烦,我们封装一个函数来调用
    
public static void Log ( object message ) { # if UNITY_EDITOR UnityEngine . Debug . Log ( message ) ; # endif }
想法很好,但是这样打印Log之后,我们在Unity的Console窗口双击该打印信息,就会直接跳转到封装好的Log函数,而并不是跳转到我们设置的打印的位置。

探究Debug.Log函数

我们通过Unity的Debug.Log函数跟踪过去,发现了这样一个有意思的写法
函数上方有一个Conditional属性。我们查看它的含义发现
当定义了UNITY_ASSERTIONS宏的时候,该函数才会被调用。它其实就相当于如下函数
    
[ Conditional ( "UNITY_ASSERTIONS" ) ] public static void Assert ( bool condition , string message , Object context ) ;
相当于
    
# if UNITY_ASSERTIONS public static void Assert ( bool condition , string message , Object context ) { } # endif
该函数被宏包起来了。

由Conditional启发

通过Conditional启发了QLog的诞生。我们通过Conditional编写一个专门用来调试使用的dll文件。然后在Unity里面直接调用即可。这样就可以避免了上面提到的,双击会跳转到同一个函数的问题。
打开VS,选择文件,新建,项目。选择.net framework类库,注意框架要选择.net 3.5,因为Unity里面最低版本是3.5
然后添加UnityEngine的dll引用
接下来只需要在Program.cs文件编写代码如下
    
using UnityEngine ; using System . Diagnostics ; public class QLog { # region Conditional [ Conditional ( "QLog" ) ] public static void Sample ( object message ) { UnityEngine . Debug . Log ( message ) ; } [ Conditional ( "UNITY_EDITOR" ) ] public static void LogEditor ( object message ) { UnityEngine . Debug . Log ( message ) ; } [ Conditional ( "UNITY_EDITOR" ) ] public static void LogWarningEditor ( object message ) { UnityEngine . Debug . LogWarning ( message ) ; } [ Conditional ( "UNITY_EDITOR" ) ] public static void LogErrorEditor ( object message ) { UnityEngine . Debug . LogWarning ( message ) ; } # endregion # region Unity API public static void Log ( object message ) { UnityEngine . Debug . Log ( message ) ; } public static void LogError ( object message ) { UnityEngine . Debug . LogError ( message ) ; } public static void LogWarning ( object message ) { UnityEngine . Debug . Log ( message ) ; } # endregion }
我们查看QLog的属性,然后确认如下
接下来选择release版本,点击生成即可
我们将生成好的QLog.dll放入Unity的Plugins文件夹下面即可
接下来,我们编写如下测试案例
    
using UnityEngine ; public class QLogTest : MonoBehaviour { void Start ( ) { QLog . Sample ( "QLog.Sample" ) ; QLog . Log ( "QLog.Log" ) ; QLog . LogEditor ( "QLog.LogEditor" ) ; QLog . LogError ( "QLog.LogError" ) ; QLog . LogErrorEditor ( "QLog.LogErrorEditor" ) ; QLog . LogWarning ( "QLog.LogWarning" ) ; QLog . LogWarningEditor ( "QLog.LogWarningEditor" ) ; } }

在不开启QLog宏的时候打印如下

只有6条打印信息,其中QLog.Sample并没有打印出来。

在开启QLog宏的时候打印如下

发现当QLog宏开启的时候,QLog.Sample被打印了出来。
完整工程代码地址: https://github.com/onelei/OneLog

DLL工程

“QLog”文件夹

Unity工程

“Assets”文件夹

如果本文对你有所帮助,欢迎赞赏~~~

《游戏AI程序设计实战》作者
微信公众号:Unity游戏开发笔记
Github:https://github.com/onelei
优快云:https://blog.youkuaiyun.com/onelei1994
QQ交流群:754814245
欢迎支持我的新书《游戏AI程序设计实战》
https://item.jd.com/12520141.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值