Unity 打印log时,使用StringBuilder比String好,String会产生垃圾,使用StringBuilder能避免String产生垃圾

using System;

using System.Diagnostics;

using System.Reflection;

using System.Text;

using UnityEngine;

public class Log

{

// private static StringBuilder _builder = new StringBuilder(1024);

public static void I(string tag, string format, params object\[\] args)

{

UnityEngine.Debug.Log(buildString(tag, format, args));

}

复制代码
public static void W(string tag, string format, params object[] args)
{
    UnityEngine.Debug.LogWarning(buildString(tag, format, args));
}

public static void E(string tag, string format, params object[] args)
{
    UnityEngine.Debug.LogError(buildString(tag, format, args));
}

private static StringBuilder buildString(string tag, string format, params object[] args)
{
    StringBuilder _builder = new StringBuilder(1024);
    _builder.Clear();
    _builder.Append("Snake_");
    _builder.Append(tag);
    _builder.Append(": ");
    if (args != null && args.Length > 0)
    {
        _builder.AppendFormat(format, args);
    }
    else
    {
        _builder.Append(format);
    }

    return _builder;
}

}

namespace Banma.Unity.Log

{

public static class Xlog

{

private const string c_str_project_name = "Snake";

复制代码
    public static void Log(this MonoBehaviour mono, string _str_log, bool _b_is_error = false)
    {
        // 获取传入实例所属类的名称
        string className = mono.GetType().Name;

        // 获取当前执行的函数的名称
        string methodName = new System.Diagnostics.StackTrace().GetFrame(1).GetMethod().Name;
        if (_b_is_error)
        {
            UnityEngine.Debug.LogError($"【{c_str_project_name}】/【{className}】/【{methodName}】:){_str_log}");
        }
        else
        {
            UnityEngine.Debug.Log($"【{c_str_project_name}】/【{className}】/【{methodName}】:){_str_log}");
        }
    }

    public static void Log(string _str_log, bool _b_is_error = false)
    {
        StackTrace stackTrace = new StackTrace();
        StackFrame[] stackFrames = stackTrace.GetFrames();

        if (stackFrames.Length >= 2)
        {
            // 获取调用堆栈的第一个方法(当前方法是第二个)
            StackFrame callerFrame = stackFrames[1];
            MethodBase callerMethod = callerFrame.GetMethod();
            Type callerType = callerMethod.DeclaringType;

            if (_b_is_error)
            {
                // 打印调用类和函数的信息
                UnityEngine.Debug.LogError($"【Snake】/【{callerType.Name} 】/【{callerMethod.Name}】:){_str_log}");
            }
            else
            {
                // 打印调用类和函数的信息
                UnityEngine.Debug.Log($"【Snake】/【{callerType.Name} 】/【{callerMethod.Name}】:){_str_log}");
            }
        }
    }
}

}

相关推荐
qq_3707730910 小时前
Unity游戏xLua逆向实战:从SO版本识别到Lua脚本热替换全链路
游戏·unity·lua
mxwin12 小时前
Unity Shader 水面 Shader 教程 从 Gerstner 波浪到屏幕折射、焦散、泡沫的完整实现
unity·游戏引擎
噗噗夹的TA之旅13 小时前
Shader 学习 21:自定义 Render Feature
学习·游戏·unity·c#·游戏引擎·图形渲染
zcmodeltech18 小时前
化工装置沙盘模型多设备协同控制系统设计:基于STM32与Modbus RTU的装置-流程-安全联动方案
大数据·stm32·嵌入式硬件·安全·unity·制造
暗影凋落2 天前
Unity 射线检测优化:使用 Job System 实现高性能射线批处理
unity·游戏引擎·lucene
淡海水2 天前
12-01-YooAsset工程化-Unity资源管理规范
unity·c#·游戏引擎·yooasset
BuHuaX2 天前
U3D抖微小游戏开发流程 (一)
unity·c#·游戏引擎·游戏策划
_ZHOURUI_H_2 天前
Unity MyFramework 用法说明(二十三):使用 PrefabPoolManager 复用预设实例
unity·游戏引擎·游戏开发·游戏ui·手游开发
冰凌糕2 天前
Unity3D Shader 法线与基础光照
unity
新手unity自用笔记2 天前
unity网络基础_1
网络·unity·游戏引擎