Unity Debug Dll 编写

22 篇文章 1 订阅
21 篇文章 0 订阅

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

20191202211512

在这里插入图片描述

然后添加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被打印了出来。

DLL工程

“QLog”文件夹
https://github.com/onelei/QLog/tree/master/QLog

Unity工程

“Assets”文件夹
https://github.com/onelei/QLog/tree/master/Assets

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值