实用Unity3D Log打印工具XDebug

特点

  • 显示时间,精确到毫秒
  • 显示当前帧数(在主线程中的打印才有意义,非主线程显示为-1)
  • 有三种条件编译符(如下图)
    在这里插入图片描述
    注:
  • 要能显示线程中的当前帧数,要在app启动时,初始化mainThreadID字段
  • 条件编译符的好处是,不需要的要打印的log调用不会产生任何额外的消耗。
  • 如需要打印输出到文件,请自行扩展,写文件时建议用子线程执行

上代码

using System;
using System.Diagnostics;
using System.Threading;
using UnityEngine;
using Debug = UnityEngine.Debug;
using Object = UnityEngine.Object;namespace Main
{public class XDebug{/// <summary>/// 主线程id/// </summary>public static int mainThreadID { get; set; } = -1;static bool _enable = true;/// <summary>/// 是否为发布版本/// </summary>public static bool Enable {get { return _enable; }set {if (value != _enable){Debug.unityLogger.logEnabled = value;_enable = value;}}}[Conditional("DEBUG_LOG_WARM_ERROR")]public static void Log(object message, Object context=null){if (!_enable) return;string log = string.Concat(GetPrefix(), message);Debug.Log(log, context);}[Conditional("DEBUG_LOG_WARM_ERROR")]public static void LogFormat(Object context, string format, params object[] args){if (!_enable) return;string log = string.Concat(GetPrefix(), format);Debug.LogFormat(context, log, args);}[Conditional("DEBUG_LOG_WARM_ERROR")][Conditional("DEBUG_WARM_ERROR")]public static void LogWarning(object message, Object context=null){if (!_enable) return;string log = string.Concat(GetPrefix(), message);Debug.LogWarning(log, context);}[Conditional("DEBUG_LOG_WARM_ERROR")][Conditional("DEBUG_WARM_ERROR")]public static void LogWarningFormat(Object context, string format, params object[] args){if (!_enable) return;string log = string.Concat(GetPrefix(), format);Debug.LogWarningFormat(context, log, args);}[Conditional("DEBUG_LOG_WARM_ERROR")][Conditional("DEBUG_WARM_ERROR")][Conditional("DEBUG_ERROR")]public static void LogError(object messag, Object context=null){if (!_enable) return;string log = string.Concat(GetPrefix(), messag);Debug.LogError(log, context);}[Conditional("DEBUG_LOG_WARM_ERROR")][Conditional("DEBUG_WARM_ERROR")][Conditional("DEBUG_ERROR")]public static void LogErrorFormat(Object context, string format, params object[] args){if (!_enable) return;string log = string.Concat(GetPrefix(), format);Debug.LogErrorFormat(context, log, args);}public static void Assert(bool condition, object message, Object context=null){if (!_enable) return;Debug.Assert(condition, message, context);}public static void LogException(Exception e, Object context=null){if (!_enable) return;Debug.LogException(e,context);}static string GetPrefix(){// 当前帧int curFrame = -1;if (Thread.CurrentThread.ManagedThreadId == mainThreadID){curFrame = Time.frameCount;}// 当前时间string curTime = DateTime.Now.ToString("HH:mm:ss.fff");return $"[{curTime}][{curFrame}] ";}}
}

打个赏吧

请添加图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

虹科技术丨PCAN网关设备:打通通信壁垒,LED指示灯编程示例

来源&#xff1a;虹科汽车智能互联 虹科技术丨PCAN网关设备&#xff1a;打通通信壁垒&#xff0c;LED指示灯编程示例 原文链接&#xff1a;https://mp.weixin.qq.com/s/hpxssnDeD-43x3tyHJbAtA 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; 导读 在工业自动化、汽…

使用Ray Marching进行3D渲染

要使用Ray Marching渲染 3D 场景&#xff0c;我们需要为每个像素发射一条光线。通过选择屏幕上的一个点&#xff08;一个像素&#xff09;&#xff0c;并从视点绘制一条射线&#xff0c;我们可以确定它是否击中一个对象&#xff0c;并决定应该在该像素上绘制什么。使用着色器&a…

51-5 Transformer 论文精读

李沐&#xff08;沐神&#xff09;、朱毅讲得真的好&#xff0c;干货蛮多&#xff0c;醍醐灌顶。编码器、解码器、多头自注意力、自回归的概念没搞清楚的话&#xff0c;值得认真读很多遍&#xff0c;甚至可以当成多模态大模型基础课程学习。 今天我们将讲的是transformer这个模…

CentOS中开启mysql挂载

挂载的作用其实说白了就是备份。防止数据库文件损害或者数据库被误删导致数据丢失。 创建一个文件名为my.cnf内容如下 # Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. # # This program is free software; you can redistribute it and/or modif…

C语言中的指针变量p,特殊表达式p[0] ,(*p)[0],(px+3)[2] ,(*px)[3]化简方法

一.已知以下代码&#xff0c;请问以下 式子p[0] &#xff0c;p[1] &#xff0c;(*p)[0] &#xff0c;(*p)[1] 是什么意思&#xff1f; int A[3] {1,2,3}; int (*p)[3] &A; 因为前面的嵌入式C语言基础的章节中说过&#xff0c;数组下标其实就是数组首元素的地址往上偏…

FPGA 高端项目:基于 SGMII 接口的 UDP 协议栈,提供2套工程源码和技术支持

目录 1、前言免责声明 2、相关方案推荐我这里已有的以太网方案本协议栈的 1G-UDP版本本协议栈的 10G-UDP版本本协议栈的 25G-UDP版本1G 千兆网 TCP-->服务器 方案1G 千兆网 TCP-->客户端 方案10G 万兆网 TCP-->服务器客户端 方案 3、该UDP协议栈性能4、详细设计方案设…

使用pytorch构建图卷积网络预测化学分子性质

在本文中&#xff0c;我们将通过化学的视角探索图卷积网络&#xff0c;我们将尝试将网络的特征与自然科学中的传统模型进行比较&#xff0c;并思考为什么它的工作效果要比传统的方法好。 图和图神经网络 化学或物理中的模型通常是一个连续函数&#xff0c;例如yf(x₁&#xff…

一、Mybatis 简介

本章概要 简介持久层框架对比快速入门&#xff08;基于Mybatis3方式&#xff09; 1.1 简介 https://mybatis.org/mybatis-3/zh/index.html MyBatis最初是Apache的一个开源项目iBatis, 2010年6月这个项目由Apache Software Foundation迁移到了Google Code。随着开发团队转投G…

红帽宣布CentOS 7和RHEL 7将在2024年6月30日结束支持,企业面临紧迫的迁移压力!

2020 年红帽 (RedHat&#xff0c;已在 2019 年被 IBM 收购) 单方面宣布终止 CentOS Linux 的开发&#xff0c;此后 CentOS Linux 8 系列的更新已经在 2021 年 12 月结束&#xff0c;而 CentOS Linux 7 系列的更新将在 2024 年 6 月 30 日结束。 与 CentOS Linux 7 一起发布的 R…

VS代码生成工具ReSharper v2023.3正式发布——支持C# 12

实质上&#xff0c;ReSharper特征可用于C#&#xff0c;VB.net&#xff0c;XML&#xff0c;Asp.net&#xff0c;XAML&#xff0c;和构建脚本。 使用ReSharper&#xff0c;你可以进行深度代码分析&#xff0c;智能代码协助&#xff0c;实时错误代码高亮显示&#xff0c;解决方案范…

添加 常用校验方法,校验常见数据格式

目录 一、前置说明1、总体目录2、相关回顾3、本节目标 二、操作步骤1、项目目录2、代码实现3、测试代码4、日志输出 三、后置说明1、要点小结2、下节准备 一、前置说明 1、总体目录 《 pyparamvalidate 参数校验器&#xff0c;从编码到发布全过程》 2、相关回顾 基于 Valid…

PhpPythonC++圆类的实现(OOP)

哎......被投诉了 &#x1f62d;&#x1f62d;&#x1f62d;&#x1f62d;&#x1f62d; 其实也不是小编不更&#xff0c;这不是期末了吗&#xff08;zhaojiekou~~&#xff09;&#xff0c;而且最近学的信息收集和ctf感觉好像没找到啥能更的&#xff08;不过最经还是在考虑更一…