最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Unity日志打印工具功能

 更新時間:2022年01月29日 10:39:52   作者:小紫蘇  
Unity是一個非常火的游戲引擎,我們再開發(fā)的時候有的時候要進(jìn)行程序的調(diào)試,下面給大家介紹下Unity日志打印工具功能,感興趣的朋友一起看看吧

一、日志工具功能

封裝Debug類,需要實(shí)現(xiàn)功能:

1.控制所有日志是否打?。?/p>

2.除了Log,Warning,Error外,給更多日志種類(不同顏色);

3.格式化打印日志;

4.不定參數(shù),自動拼接成字符串;

5.上傳日志到服務(wù)器;

二、Logger類

1.控制日志打印

封裝Debug中關(guān)于Log的方法;

使用靜態(tài)方法,聲明靜態(tài)字段,控制log,warning,error是否打?。?/p>

Debug源碼中Log方法有兩個重載;

第二個參數(shù)context可以傳參GameObject,Hierarchy或者Project窗口中的預(yù)制體,雙擊Console日志會直接跳轉(zhuǎn)選中傳入的游戲物體;

我們可以將這個方法合并,第二個參數(shù)默認(rèn)空;

2.色彩打印

打印不同顏色使用富文本

string.Format("<color={0}>{1}</color>",color,obj);

3.多參數(shù)拼接

之前使用Go語言的fmt.Println有個功能很好用,連續(xù)傳多個參數(shù)自動拼接;

public static void Log(params object[] messags)
{
    if (!s_debugLogEnable) return;

    string message = string.Empty;
    foreach (var it in messags)
    {
        message += it.ToString();
    }

    Debug.Log(message, null);
}

//調(diào)用
Logger.Log("Net error:",error,"msgId:",msgId);

4.格式化打印

格式化打印封裝原本Debug.LogFormat方法;

public static void LogFormat(string format, params object[] args)
{
    if (!s_debugLogEnable) return;
    Debug.LogFormat(format, args);
}

三、LoggerMgr類

繼承MonoBehavior的單例;

初始化Logger中的三個控制打印的字段;

Application類中有收到日志消息觸發(fā)的事件LogMessageReceived;

監(jiān)聽這個事件;如果日志開關(guān)為關(guān)閉狀態(tài)return;

if (isOpenLog)
{
    Logger.s_debugLogEnable = true;
    Logger.s_warningLogEnable = true;
    Logger.s_errorLogEnable = true;          
}

Application.logMessageReceived += (string condition, string stackTrace, LogType type) =>
{
    switch (type)
    {
        case LogType.Log:
            {
                if (!Logger.s_debugLogEnable) return;
            }
            break;
        case LogType.Warning:
            {
                if (!Logger.s_warningLogEnable) return;
            }
            break;
        case LogType.Error:
            {
                if (!Logger.s_errorLogEnable) return;
            }
            break;
    }
};

四、上傳日志

LoggerMgr中初始化上傳日志信息;

方法寫在logger中,在LoggerMgr開始調(diào)用;

public static void Init(string url)
{
    LogUploader.SetUploadUrl(url);
    // 日期
    var t = System.DateTime.Now.ToString("yyyyMMddhhmmss");
    s_logFileSavePath = string.Format("{0}/output_{1}.log", Application.persistentDataPath, t);
    Application.logMessageReceived += OnLogCallBack;
}

OnLogCallBack方法中將日志和棧信息存儲成文件,等待上傳;

private static void OnLogCallBack(string condition, string stackTrace, LogType type)
{
    s_logStr.Append(condition);
    s_logStr.Append("\n");
    s_logStr.Append(stackTrace);
    s_logStr.Append("\n");

    if (s_logStr.Length <= 0) return;
    if (!File.Exists(s_logFileSavePath))
    {
        var fs = File.Create(s_logFileSavePath);
        fs.Close();
    }
    using (var sw = File.AppendText(s_logFileSavePath))
    {
        sw.WriteLine(s_logStr.ToString());
    }
    s_logStr.Remove(0, s_logStr.Length);
}

LogUploader類

開啟協(xié)程上傳日志文件;

public static void StartUploadLog(string logFilePath, string desc)
{
    if (LOG_UPLOAD_URL == string.Empty)
        return;

    var go = new GameObject("LogUploader");
    var bhv = go.AddComponent<LogUploader>();
    bhv.StartCoroutine(bhv.UploadLog(logFilePath, LOG_UPLOAD_URL, desc));
}

在Logger類中同樣封裝上面的方法,所有的日志都通過Logger打??;

public static void UploadLog(string desc)
{
    LogUploader.StartUploadLog(s_logFileSavePath, desc);
}

五、日志雙擊溯源問題

以上的代碼有個很大的問題,現(xiàn)在我們雙擊不會回到調(diào)用Logger的地方,只會跳轉(zhuǎn)到Logger類中調(diào)用Debug.Log的地方;

有個很簡單的辦法解決,將上面代碼編譯成dll;

另外查找源碼也可以自己決定掉轉(zhuǎn)位置;

具體方法,通過反射獲日志取棧信息,根據(jù)Logger類返回的棧信息路徑,篩選出要跳轉(zhuǎn)的位置;

通過官方提供的方法跳轉(zhuǎn)到相應(yīng)位置;

UnityEditorInternal.InternalEditorUtility.OpenFileAtLineExternal(string filename, int line);

六、調(diào)用

void Start()
{
    Logger.Log("aaaa");
    Logger.LogFormat("{0}===={1}",111,0.232);
    Logger.LogGreen("bbbb");
    Logger.LogError("log error");
    Logger.Log("aa", 13, "fff",16,"sfddf",64654);
    Logger.UploadLog("NetWork LogTest");
}

工具類下載

到此這篇關(guān)于Unity日志打印工具的文章就介紹到這了,更多相關(guān)Unity日志打印內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • C#中屬性PropertyInfo使用示例小結(jié)

    C#中屬性PropertyInfo使用示例小結(jié)

    在C#中,PropertyInfo是一個用于獲取和設(shè)置屬性的類,這篇文章主要介紹了C#中屬性PropertyInfo怎么使用,需要的朋友可以參考下
    2024-06-06
  • C#對文件/文件夾操作代碼匯總

    C#對文件/文件夾操作代碼匯總

    有關(guān)文件的操作的內(nèi)容非常多,不過幾乎都是從下面的這些基礎(chǔ)方法中演化出來的。比如對內(nèi)容的修改,不外乎就是加上點(diǎn)字符串操作或者流操作。還有其它一些特別的內(nèi)容,等在開發(fā)項目中具體遇到后再添加。
    2015-04-04
  • unity實(shí)現(xiàn)鼠標(biāo)跟隨(ITween)

    unity實(shí)現(xiàn)鼠標(biāo)跟隨(ITween)

    這篇文章主要為大家詳細(xì)介紹了unity實(shí)現(xiàn)鼠標(biāo)跟隨,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • C#中ArrayList?類的使用詳解

    C#中ArrayList?類的使用詳解

    這篇文章主要介紹了C#中ArrayList?類的使用詳解,動態(tài)數(shù)組ArrayList類在System.Collecions的命名空間下,所以使用時要加入System.Collecions命名空間,而且ArrayList提供添加,插入或移除某一范圍元素的方法
    2022-09-09
  • WinForm項目開發(fā)中Excel用法實(shí)例解析

    WinForm項目開發(fā)中Excel用法實(shí)例解析

    這篇文章主要介紹了WinForm項目開發(fā)中Excel用法,非常實(shí)用,需要的朋友可以參考下
    2014-08-08
  • unity實(shí)現(xiàn)簡單抽獎系統(tǒng)

    unity實(shí)現(xiàn)簡單抽獎系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了unity實(shí)現(xiàn)簡單抽獎系統(tǒng),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • C#中隱藏TabControl選項卡標(biāo)簽的解決方案

    C#中隱藏TabControl選項卡標(biāo)簽的解決方案

    這篇文章主要介紹了C#中隱藏TabControl選項卡標(biāo)簽的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • c# 兩種發(fā)送郵件的方法

    c# 兩種發(fā)送郵件的方法

    這篇文章主要介紹了c# 兩種發(fā)送郵件的方法,幫助大家更好的理解和學(xué)習(xí)使用c#,感興趣的朋友可以了解下
    2021-04-04
  • C#使用Selenium+PhantomJS抓取數(shù)據(jù)

    C#使用Selenium+PhantomJS抓取數(shù)據(jù)

    本文主要介紹了C#使用Selenium+PhantomJS抓取數(shù)據(jù)的方法步驟,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • vscode編寫latex的方法

    vscode編寫latex的方法

    這篇文章主要介紹了vscode編寫latex的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07

最新評論

都兰县| 武定县| 青浦区| 永川市| 辉南县| 华安县| 剑阁县| 罗甸县| 临猗县| 文成县| 洪湖市| 石林| 湘乡市| 澎湖县| 芦溪县| 保靖县| 日喀则市| 增城市| 泰安市| 绵竹市| 桑日县| 出国| 沧源| 梁平县| 洪江市| 社旗县| 内乡县| 铁岭市| 南皮县| 湾仔区| 凤山市| 翁源县| 壶关县| 河池市| 浙江省| 类乌齐县| 太和县| 康乐县| 汤阴县| 章丘市| 友谊县|