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

推荐阅读

  • 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);
    }
}

运行结果:
在这里插入图片描述
设置关闭所有日志或者或者仅开启错误及以上级别日志:
在这里插入图片描述
日志保存文件这个功能框架接口写好了,我们只需要调用即可。

我们新建一个脚本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 ?? "<Empty Message>", stackTrace ?? "<Empty StackTrace>", Environment.NewLine);
        try
        {
            File.AppendAllText(CurrentLogPath, log, Encoding.UTF8);
        }
        catch
        {
        }
    }
}

在Base脚本选择使用:
在这里插入图片描述

2-3、实现及代码分析

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

        /// <summary>
        /// 打印调试级别日志,用于记录调试类日志信息。
        /// </summary>
        /// <param name="message">日志内容。</param>
        /// <remarks>仅在带有 ENABLE_LOG、ENABLE_DEBUG_LOG 或 ENABLE_DEBUG_AND_ABOVE_LOG 预编译选项时生效。</remarks>
        [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
在这里插入图片描述
ScriptingDefineSymbols.cs
几层调用之后,可以看到 ScriptingDefineSymbols 类:
在这里插入图片描述

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

Player Settings 是您为即将在 Unity 中构建的最终游戏定义各种参数的地方。
其中一些值将用于您打开独立平台游戏时所启动的分辨率对话框。

Unity中的预处理指令设置:
在这里插入图片描述

三、后记

如果觉得本篇文章有用别忘了点个关注,关注不迷路,持续分享更多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和坑,让后来人可以有些参考。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/412250.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【生成式AI】ChatGPT 原理解析(2/3)- 预训练 Pre-train

Hung-yi Lee 课件整理 预训练得到的模型我们叫自监督学习模型&#xff08;Self-supervised Learning&#xff09;&#xff0c;也叫基石模型&#xff08;foundation modle&#xff09;。 文章目录 机器是怎么学习的ChatGPT里面的监督学习GPT-2GPT-3和GPT-3.5GPTChatGPT支持多语言…

【蓝桥杯单片机入门记录】动态数码管

目录 一、数码管动态显示概述 二、动态数码管原理图 &#xff08;1&#xff09;原理图 &#xff08;2&#xff09;动态数码管如何与芯片相连 &#xff08;3&#xff09;“此器件” ——>锁存器74HC573 三、动态数码管显示例程 &#xff08;1&#xff09;例程1&#xf…

深入浅出JVM(十三)之垃圾回收算法细节

上篇文章深入浅出JVM&#xff08;十二&#xff09;之垃圾回收算法讨论了垃圾回收算法&#xff0c;为了能够更加充分的理解后续的垃圾收集器&#xff0c;本篇文章将深入浅出解析垃圾回收算法的相关细节&#xff0c;如&#xff1a;STW、枚举根节点如何避免长时间STW、安全点与安全…

浅谈 TCP 三次握手

文章目录 三次握手 三次握手 首先我们需要明确&#xff0c;三次握手的目的是什么&#xff1f; 是为了通信双方之间建立连接&#xff0c;然后传输数据。 那么建立连接的条件是什么呢&#xff1f; 需要确保通信的双方都确认彼此的接收和发送能力正常&#xff0c;满足这个条件&a…

Java+SpringBoot+Vue+MySQL构建银行客户管理新平台

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

【Flutter/Android】新建项目,打开android 目录,报错红色以及开启 MultiDex 配置

1 报错红色问题。 单独打开 Flutter 项目下的 android 项目即可。 也就是说&#xff0c;你要一部分原生代码开发&#xff0c;你就需要自己把 android 项目单独出去做&#xff08;其实就相当于android 项目引用 Flutter的dart部分&#xff09;。也就是说&#xff0c;在 Flutter…

4.WEB渗透测试-前置基础知识-快速搭建渗透环境(下)

先下载需要用到的两种语言java和python Python下载地址&#xff1a; Download Python | Python.org 点击Download Python 3.12.2下载即可 Java下载地址&#xff1a; https://www.oracle.com/cn/java/technologies/downloads/#license-lightbox 根据你电脑的操作系统和位数…

List去重有几种方式

目录 1、for循环添加去重 2、for 双循环去重 3、for 双循环重复坐标去重 4、Set去重 5、stream流去重 1、for循环添加去重 List<String> oldList new ArrayList<>();oldList.add("张三");oldList.add("张三");oldList.add("李四&q…

学成在线_课程计划查询_前端页面无法跳转

问题描述 在进行课程计划查询的接口开发时通过了http-client测试但点开课程修改界面后点击保存并进行下一步时无法跳转到修改课程计划查询的页面。 问题原因 课程信息修改的Controller层没有实现 QAQ&#xff08;可能是老师在讲这一块的时候没有提这一点&#xff08;我也记…

System V版本的共享内存

在之前的学习中我们学习到了使用匿名和命名管道进行进程间的通信&#xff0c;下面我们再来使用一种新的方式进行进程间的通信。 我们下面要学习的是system V版本的共享内存。 首先我们要知道什么是system V 首先我们要知道我们在之前学习的管道通信的代码并不是一个专门设计…

Web JavaScript

目录 1 前言2 原生js常见用法2.1 弹窗操作2.2 for循环操作2.3 打印日志操作2.4 获取页面值操作2.5 判空操作2.6 修改页面内容操作2.7 网页版计算器制作 3 外部js常见用法4 总结 1 前言 JavaScript 是一种脚本&#xff0c;一门编程语言&#xff0c;它可以在网页上实现复杂的功能…

vue2、vue3各自的响应式原理

查看本专栏目录 关于作者 还是大剑师兰特&#xff1a;曾是美国某知名大学计算机专业研究生&#xff0c;现为航空航海领域高级前端工程师&#xff1b;CSDN知名博主&#xff0c;GIS领域优质创作者&#xff0c;深耕openlayers、leaflet、mapbox、cesium&#xff0c;canvas&#x…

46.仿简道云公式函数实战-文本函数-CHAR

1. CHAR函数 函数可将计算机其他类型的数字代码转换为字符。 2. 函数用法 CHAR(number) CHAR 函数可将计算机其他类型的数字代码转换为字符。 Number&#xff1a;用于指定字符的数字。 3. 函数示例 CHAR(10)&#xff0c;即返回值为换行字符"\n"。 目前仿简道…

易查分系统可靠吗?答:非常安全可靠

易查分系统非常安全可靠 易查分系统之所以备受信赖&#xff0c;其关键在于其强大的安全保障措施。该系统采用了高强度的加密防火墙&#xff0c;确保用户数据在传输和存储过程中得到充分的保护。同时&#xff0c;易查分严格遵守数据安全协议&#xff0c;对所有上传的数据进行加…

vue中循环多个li(表格)并获取对应的ref

有种场景是这样的 <ul><li v-for"(item,index) in data" :key"index" ref"???">{{item}}</li> </ul> //key值在项目中别直接用index&#xff0c;最好用id或其它关键值const data [1,2,3,4,5,6]我想要获取每一个循环并…

oracle官网下载早期jdk版本

Java Downloads | Oracle JDK Builds from Oracle 以上压缩版&#xff0c;以下安装版 Java Downloads | Oracle 该链接往下拉能看到jdk8和jdk11的安装版 -- end

【初始RabbitMQ】高级发布确认的实现

在生产环境中由于一些不明原因&#xff0c;导致 rabbitmq 重启&#xff0c;在 RabbitMQ 重启期间生产者消息投递失败&#xff0c; 导致消息丢失&#xff0c;需要手动处理和恢复。于是&#xff0c;我们开始思考&#xff0c;如何才能进行 RabbitMQ 的消息可靠投递呢&#xff1f; …

Untiy webgl iis服务器加载ab包报404.3,需要为AB包添加MIMI映射

首选确定一下文件在不在 这里是缺少对于AB文件类型的映射&#xff0c;因为AB包没有后缀名&#xff0c;我们为服务器添加通用的映射 开始菜单搜索iis管理器&#xff0c;进入mimie类型 右侧点击添加按钮 文件扩展名为. 类型为application/octet-stream &#xff08;字节流&…

Android 输入法框架简介

每种平台都有自己的输入法框架. GNU/Linux 桌面环境有多种输入法框架, 比如 ibus, fcitx 等. 但是 Android 操作系统只有一种, 是统一提供的输入法框架. 相关链接: 《ibus 源代码阅读 (1)》 https://blog.csdn.net/secext2022/article/details/136099328https://developer.and…

深入理解 JavaScript 对象原型,解密原型链之谜(上)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…