【GameFramework框架内置模块】4、内置模块之调试器(Debugger)

02-28 1310阅读

推荐阅读

  • CSDN主页
  • GitHub开源地址
  • Unity3D插件分享
  • 简书地址
  • QQ群:398291828

    大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。

    一、前言

    【GameFramework框架】系列教程目录:

    https://blog.csdn.net/q764424567/article/details/135831551

    二、正文

    2-1、介绍

    日志模块,大家都很熟悉了,为啥GameFramework框架又做了这么一个模块呢。

    大家在使用Debug.Log打印日志的时候,相比大家也能发现一些问题,比如说:

    • 在开发环境需要打印日志,在正式环境需要关闭日志,Unity没有全局开关日志的方法
    • 没有日志文件保存到指定路径的功能

      而GameFramework框架的调试器Debugger模块主要就是实现这两个功能:

      • 发布产品,关闭所有日志或者仅开启错误及以上级别日志,开发调试的时候自定义开启日志级别。
      • 将日志保存到文件的功能

        下面就来看一下如何使用。

        2-2、使用说明

        示例参考代码:

        using System;
        using System.Collections;
        using System.Collections.Generic;
        using UnityEngine;
        public class Test05 : MonoBehaviour
        {
            void Start()
            {
                UnityEngine.Debug.Log("Unity普通日志");
                UnityEngine.Debug.LogWarning("Unity警告日志");
                UnityEngine.Debug.LogError("Unity错误日志");
                UnityGameFramework.Runtime.Log.Debug("框架打印调试级别日志");
                UnityGameFramework.Runtime.Log.Info("框架打印信息级别日志");
                UnityGameFramework.Runtime.Log.Warning("框架打印警告级别日志");
                UnityGameFramework.Runtime.Log.Error("框架打印错误级别日志");
                // 演示打印日志参数
                string name = "张三";
                string city = "深圳";
                int age = 18;
                string sex = "男";
                UnityGameFramework.Runtime.Log.Debug("{0}用户来自{1},年龄 {2},性别 {3}.....", name, city, age, sex);
            }
        }
        

        运行结果:

        【GameFramework框架内置模块】4、内置模块之调试器(Debugger)

        设置关闭所有日志或者或者仅开启错误及以上级别日志:

        【GameFramework框架内置模块】4、内置模块之调试器(Debugger)

        日志保存文件这个功能框架接口写好了,我们只需要调用即可。

        我们新建一个脚本FileLogHelper继承于DefaultLogHelper:

        using GameFramework;
        using System;
        using System.Collections;
        using System.Collections.Generic;
        using System.IO;
        using System.Text;
        using UnityEngine;
        using UnityGameFramework.Runtime;
        internal class FileLogHelper : DefaultLogHelper
        {
            //设置日志文件保存路径-你可以自定义,也可以使用系统的
            private readonly string CurrentLogPath = Utility.Path.GetRegularPath(Path.Combine(Application.persistentDataPath, "current.log"));
            private readonly string PreviousLogPath = Utility.Path.GetRegularPath(Path.Combine(Application.persistentDataPath, "previous.log"));
            public FileLogHelper()
            {
                Application.logMessageReceived += OnLogMessageReceived;
                try
                {
                    //每次运行的时候将日志替换,就像队列一样
                    if (File.Exists(PreviousLogPath))
                    {
                        File.Delete(PreviousLogPath);
                    }
                    if (File.Exists(CurrentLogPath))
                    {
                        File.Move(CurrentLogPath, PreviousLogPath);
                    }
                }
                catch
                {
                }
            }
            private void OnLogMessageReceived(string logMessage, string stackTrace, LogType logType)
            {
                string log = Utility.Text.Format("[{0}][{1}] {2}{4}{3}{4}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"), logType.ToString(), logMessage ?? "", stackTrace ?? "", Environment.NewLine);
                try
                {
                    File.AppendAllText(CurrentLogPath, log, Encoding.UTF8);
                }
                catch
                {
                }
            }
        }
        

        在Base脚本选择使用:

        【GameFramework框架内置模块】4、内置模块之调试器(Debugger)

        2-3、实现及代码分析

        OK,接下来,我们就来分析一下,如何禁用日志打印及日志文件保存的。

                /// 
                /// 打印调试级别日志,用于记录调试类日志信息。
                /// 
                /// 日志内容。
                /// 仅在带有 ENABLE_LOG、ENABLE_DEBUG_LOG 或 ENABLE_DEBUG_AND_ABOVE_LOG 预编译选项时生效。
                [Conditional("ENABLE_LOG")]
                [Conditional("ENABLE_DEBUG_LOG")]
                [Conditional("ENABLE_DEBUG_AND_ABOVE_LOG")]
                public static void Debug(object message)
                {
                    GameFrameworkLog.Debug(message);
                }
        
        • 使用 预处理指令(宏) 与 Conditional特性 设置是否忽略方法调用
        • 预处理指令使用 LogScriptingDefineSymbols类 与 ScriptingDefineSymbols类 进行设置

          LogScriptingDefineSymbols.cs

          【GameFramework框架内置模块】4、内置模块之调试器(Debugger)

          ScriptingDefineSymbols.cs

          几层调用之后,可以看到 ScriptingDefineSymbols 类:

          【GameFramework框架内置模块】4、内置模块之调试器(Debugger)

          • 使用 Unity的PlayerSettings类 设置 预处理指令

            Player Settings 是您为即将在 Unity 中构建的最终游戏定义各种参数的地方。

            其中一些值将用于您打开独立平台游戏时所启动的分辨率对话框。

            Unity中的预处理指令设置:

            【GameFramework框架内置模块】4、内置模块之调试器(Debugger)

            三、后记

            如果觉得本篇文章有用别忘了点个关注,关注不迷路,持续分享更多Unity干货文章。


            你的点赞就是对博主的支持,有问题记得留言:

            博主主页有联系方式。

            博主还有跟多宝藏文章等待你的发掘哦:

            专栏方向简介
            Unity3D开发小游戏小游戏开发教程分享一些使用Unity3D引擎开发的小游戏,分享一些制作小游戏的教程。
            Unity3D从入门到进阶入门从自学Unity中获取灵感,总结从零开始学习Unity的路线,有C#和Unity的知识。
            Unity3D之UGUIUGUIUnity的UI系统UGUI全解析,从UGUI的基础控件开始讲起,然后将UGUI的原理,UGUI的使用全面教学。
            Unity3D之读取数据文件读取使用Unity3D读取txt文档、json文档、xml文档、csv文档、Excel文档。
            Unity3D之数据集合数据集合数组集合:数组、List、字典、堆栈、链表等数据集合知识分享。
            Unity3D之VR/AR(虚拟仿真)开发虚拟仿真总结博主工作常见的虚拟仿真需求进行案例讲解。
            Unity3D之插件插件主要分享在Unity开发中用到的一些插件使用方法,插件介绍等
            Unity3D之日常开发日常记录主要是博主日常开发中用到的,用到的方法技巧,开发思路,代码分享等
            Unity3D之日常BUG日常记录记录在使用Unity3D编辑器开发项目过程中,遇到的BUG和坑,让后来人可以有些参考。
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]