Unity3d - 覆盖Debug.Log()

时间:2017-11-03 18:04:04

标签: c# unity3d

在JavaScript中,您可以覆盖某个功能,例如console.log()喜欢这样:

console.log("test1");

console.log = function() { return; };

console.log("test2");

我经常使用它来隐藏所有调试控制台消息。 我试图在Unitys Debug.Log()中使用C#来实现这个:

Debug.Log = () => { return; };

但我得到Cannot assign to Log, because it is a message groupThe left-hand side of an assignment must be a variable, a property or an indexer

是否有可能以某种方式覆盖它? 我只是很好奇。

2 个答案:

答案 0 :(得分:3)

您可以简单地以合理的方式禁用记录器

Debug.unityLogger.logEnabled = false;

答案 1 :(得分:0)

您可以自定义默认记录器处理程序

using System;
using UnityEngine;

public class LogHandler : ILogHandler
{
    public bool enable;
    private static ILogHandler unityLogHandler = Debug.unityLogger.logHandler;

    public LogHandler(bool enable = true)
    {
        this.enable = enable;
    }

    public void LogException(Exception exception, UnityEngine.Object context)
    {
        if(enable)
        {
            unityLogHandler.LogException(exception, context);
        }
    }

    public void LogFormat(LogType logType, UnityEngine.Object context, string format, params object[] args)
    {
#if UNITY_EDITOR || DEVELOPMENT_BUILD
        if(enable)
        {
            unityLogHandler.LogFormat(logType, context, format, args);
        }
#endif
    }
}

使用:

Debug.unityLogger.logHandler = new LogHandler(true);