Unity Console 窗口输出对齐
起因:做了个工具在console窗口罗列一些信息,基本结构是 [ 文件名 :行号 ],因为文件,行号长度不一,想要做到如下效果。

初步尝试,用以下方法:
string format = "{0,-10} {1,5}"; // -10 表示左对齐,10个字符宽;5 表示右对齐,5个字符宽
Debug.Log(string.Format(format, "File", "Line"));
Debug.Log(string.Format(format, "UI/Titan/UI_Titan_Main", "1"));
Debug.Log(string.Format(format, "Utils/GlobalFunction", "8"));
实际效果如下:

竟然没对齐?拷贝到IntelliJ 里查看
Utils/GlobalFunction | :8
Lua/HookReloadLuaFuc | :35
Lua/HookReloadLuaFuc | :1290
IntelliJ用了等宽字符,所以看起来是对齐的。
后续就简单了,拿到console里字体的宽度就行了。
这里贴一个大概的实现,宽度表放在最后
一个简单的lua实现
local _QuickJumpTab = {"Utils/GlobalFunction:8","Lua/HookReloadLuaFuc:35:print_table","Lua/HookReloadLuaFuc:1290:print_table","UI/Titan/TitanUtil:10:泰坦相关Gid",
}local function GetFileLine(str)local strTab = split(str,":")return unpack(strTab)
end-- 判断是否是中文字符 并且返回字符长度
local function IsChineseChar(char)local byte = string.byte(char)if byte >= 0x80 thenreturn true,2elsereturn false,1end
endlocal function Utf8StringLen(str)local len = 0local strTab = StringToUtf8Table(str)for i, v in ipairs(strTab) doif IsChineseChar(v) thenlen = len + 12elselen = len + _ConsoleCharWidth[v] or 3 -- 3 is width of spaceendendreturn len
endlocal longestStr = ""
for k, v in pairs(_QuickJumpTab) dolocal fileStr = GetFileLine(v)if Utf8StringLen(fileStr) > Utf8StringLen(longestStr) thenlongestStr = fileStrend
end
local longestStrLen = Utf8StringLen(longestStr)
--logGreen("longestStrLen\t" .. longestStrLen)local _wrapColor = function(color,str)return concat({"<color=",color,">",str,"</color>"})
end-- 自己实现一个往左边或者右边加空格补齐长度的函数
-- 用于打印的时候对齐
local FillLen = function(str,len,align,fillStr)align = align or "left"local strLen = Utf8StringLen(str)if strLen >= len thenreturn strendlocal spaceLen = len - strLenlocal needFillCount = max(spaceLen,1)if not fillStr thenfillStr = " "needFillCount = needFillCount/_ConsoleCharWidth[fillStr]endlocal spaceStr = string.rep(fillStr,ceil(needFillCount))if align == "right" thenreturn concat({str,spaceStr})elsereturn concat({spaceStr,str})end
endlocal exSymbolLen = _ConsoleCharWidth[":"] + _ConsoleCharWidth["["] + _ConsoleCharWidth["]"]local _WrapDebugStr = function(file,line,des,fileColor,lineColor)fileColor = fileColor or "#CA550C"--"cyan"lineColor = lineColor or "#00FFFF"local maxFileLen = longestStrLen+8local fileStr = FillLen(file,maxFileLen,"right")local lineStr = FillLen(":" .. line,36,"left")fileStr = _wrapColor(fileColor,fileStr)lineStr = _wrapColor(lineColor,lineStr)local desFillStr = "-"local fillCharWidth = _ConsoleCharWidth[desFillStr]maxFileLen = maxFileLen + 36 + exSymbolLenif des thenlocal colorLen = Utf8StringLen("<color=white></color>")des = _wrapColor("white",des)des = FillLen(des,(maxFileLen+colorLen)/fillCharWidth,"right",desFillStr)elsedes = FillLen("",maxFileLen/fillCharWidth,"left",desFillStr)endstr = format("[%s%s]\n%s",fileStr,lineStr,des)return str
end
_ConsoleCharWidth = {[" "] = 3,["!"] = 3,["\""] = 5,["#"] = 8,["$"] = 7,["%"] = 11,["&"] = 9,["'"] = 3,["("] = 4,[")"] = 4,["*"] = 6,["+"] = 8,[","] = 3,["-"] = 6, -- 4 original["."] = 3,["/"] = 4,[":"] = 3,[";"] = 3,["<"] = 8,["="] = 8,[">"] = 8,["?"] = 7,["@"] = 12,["["] = 4,["\\"] = 4,["]"] = 4,["^"] = 6,["_"] = 5,["`"] = 3,["{"] = 5,["|"] = 3,["}"] = 5,["~"] = 8,A = 8,B = 8,C = 9,D = 9,E = 7,F = 7,G = 9,H = 9,I = 3,J = 7,K = 8,L = 7,M = 11,N = 9,O = 9,P = 8,Q = 9,R = 8,S = 8,T = 8,U = 9,V = 8,W = 11,X = 8,Y = 8,Z = 8,a = 7,b = 7,c = 7,d = 7,e = 7,f = 4,g = 7,h = 7,i = 3,j = 3,k = 7,l = 3,m = 10,n = 7,o = 7,p = 7,q = 7,r = 4,s = 6,t = 4,u = 7,v = 7,w = 10,x = 6,y = 6,z = 6,["0"] = 8,["1"] = 6,["2"] = 7,["3"] = 8,["4"] = 8,["5"] = 7,["6"] = 7,["7"] = 7,["8"] = 7,["9"] = 7,
}
相关文章:
Unity Console 窗口输出对齐
起因:做了个工具在console窗口罗列一些信息,基本结构是 [ 文件名 :行号 ],因为文件,行号长度不一,想要做到如下效果。 初步尝试,用以下方法: string format "{0,-10} …...
leetcode198_打家劫舍
思路 动态规划 func rob(nums []int) int {if len(nums) < 2 {return nums[0]}// dp[i] 表示到第i家为止,小偷能够偷窃到的最高金额dp : make([]int, len(nums))dp[0] nums[0]dp[1] max(nums[0], nums[1])for i:2; i<len(nums); i {if nums[i] dp[i-2] &…...
C# 串口通讯怎么防止数据丢失
串口通信(Serial Communication)是计算机与设备之间进行数据交换的一种方式。在C#中进行串口通信时,防止数据丢失可以采取以下一些措施: 1.校验和(Checksum):在发送数据时,计算数据的…...
【机器学习】BP神经网络中的链式法则:解开智能背后的数学奥秘
在浩瀚的机器学习领域中,BP(反向传播)神经网络如同一座桥梁,连接着复杂的数据世界与智能的彼岸。而这座桥梁的基石之一,便是链式法则(Chain Rule)——一个看似简单却蕴含无限智慧的数学原理。今…...
MyBatis 基本操作 - 注解版
目录 一,查询 - select 1.1 全列查询 1.2 指定列查询 1.3 赋值问题 方法一:起别名 方法二:结果映射 方法三:添加配置 二,新增 - Insert 2.1 使用对象插入 2.2 获取主键 三,删除 - Delete 四&am…...
专业比例阀放大器配套选型
比例阀放大器作为液压系统中的关键组件,其技术选型对于保障系统的精确控制、稳定性和长期可靠性至关重要。下面将深入探讨比例阀放大器的技术选型要点,确保选型能满足特定的应用需求和系统性能要求: 兼容性与安装方式 阀型匹配:…...
Springboot 多数据源整合的三种方式
上链接:Springboot 多数据源整合的三种方式_springboot整合多数据源-CSDN博客...
【科研笔记】中国知网高级检索与专业检索针对同一检索内容返回的结果对比
中国知网高级检索与专业检索针对同一检索内容返回的结果对比 文献检索文献差集文献检索 预检索“复杂网络”和“事故”相关主题的文献,在高级检索界面中搜寻的结果如下,期刊选择为中文核心及以上,共检索138条文献 然后以专业检索,构建检索式“ (SU=‘事故’) AND (SU=‘复…...
C#-了解IOC控制反转及相关框架的使用
目录 一、了解IOC 1、概念 2、生命周期 二、使用 三、扩展-CommunityToolkit.Mvvm工具包 Messenger信使 方式一(收发消息) 方式二(收发消息) 方式三(请求消息) 一、了解IOC IOC,即控制…...
CSDN机器人与僵shi粉测试(真人看看)
哈哈哈一起玩个游戏 发现老是莫名其妙有很多关注点赞与收藏,关注的几百个人应该都是机器人 此博文用于检测平台机器人阅读量 —>如果是真人请务必随便留言<— 可以根据阅读量与评论判断机器人数量 不用点赞收藏有机器人就行 机器人统一特征是在2019年左右…...
【C/C++ 多态中的虚函数的虚函数表】详细的了解一下吧(要先知道有虚函数表
多态是面向对象程序设计中的一个重要特性,它允许不同类的对象对同一消息作出响应。在C++中,多态的实现主要依赖于虚函数和虚函数表。以下是对多态中虚函数表的详细描述: 一、虚函数表的概念 虚函数表(Virtual Function Table,简称VTable)是C++中用于支持多态性的一个关…...
基于树莓派4B设计的智能家居控制系统(阿里云IOT)(203)
文章目录 一、前言1.1 项目介绍【1】项目功能介绍【2】设计实现的功能【3】项目硬件模块组成1.2 设计思路1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献1.4 开发工具的选择【1】设备端开发【2】上位机开发1.5 系统框架图1.6 系统功能总结1.7 系统原理图1.8 硬件…...
太阳能光伏气象站的功能优势
太阳能光伏气象站为光伏产业的智能化、高效化发展提供了强有力的支持。 首先,该气象站能够全面采集多种关键气象要素,包括太阳倾斜辐射、日照时数、太阳总辐射、直接辐射、散射辐射等太阳辐射数据,以及风速、风向、百叶盒温湿度、大气压力、…...
LVS(Linux Virtual Server)负载均衡详解
一、LVS简介与集群概念 1. LVS(Linux Virtual Server) 即Linux虚拟服务器,是一个高性能、高可用的服务器集群解决方案,现已集成至Linux内核中。它通过IP虚拟化技术通过将网络流量分散到多个服务器上,从而提高网络服务…...
C语言 | Leetcode C语言题解之第329题矩阵中的最长递增路径
题目: 题解: const int dirs[4][2] {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; int rows, columns;typedef struct point {int x, y; } point;int longestIncreasingPath(int** matrix, int matrixSize, int* matrixColSize) {if (matrixSize 0 || matrixC…...
rabbitmq学习记录
同步和异步 (1)同步(按照流程一步一步做)使用openfengin传统的交互 响应时间长,需要将每一步的时间加起来。如果一个环境出错了,整个就报错了。并发压力大,前边的步骤有多大的并发量ÿ…...
MySQL数据库基础:约束
💎我的主页:MySQL 💎1. 约束的概述 约束是作用于表中字段的规则,用于限制存储在表中的数据 目的:保证数据库中数据的正确性,有效性和完整性 💎2. 约束的分类 💎2.1 非空约束 非空…...
Java设计模式和AOP编程
Java 六大设计原则;Java 23种设计模式(在此介绍三种设计模式) Java设计模式 单例模式 应用场景:spring中bean的作用域用的就是单例模式 //基本的单例模式————懒汉式 public class student {//3.创建static修饰的成员变量p…...
【扒代码】data.py
数据增强函数 import torch from torchvision.transforms import functional as TVFdef tiling_augmentation(img, bboxes, density_map, resize, jitter, tile_size, hflip_p):# 定义一个辅助函数,用于根据给定的概率水平翻转张量def apply_hflip(tensor, apply)…...
【时时三省】unity test 测试框架 介绍(适用于C语言进行测试的)
山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 目录 1,关于 unity test 测试框架的介绍 2,测试框架关于源码的介绍 3,使用unity test测试C代码 4,常用断言举例 1,关于 unity test 测试框架的介绍 unity test 是 ThrowTheSwitch.org 的一个主要工程。它…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
LLM基础1_语言模型如何处理文本
基于GitHub项目:https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken:OpenAI开发的专业"分词器" torch:Facebook开发的强力计算引擎,相当于超级计算器 理解词嵌入:给词语画"…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
