U3D游戏开发之自制文本工具类

进行开发时,经常对于字符串等内容进行一些操作,于是我们可以将这类重复性较高的内容进行封装,制作为工具类。今天我们将自制文本工具类,主要用于处理字符串的分割、转换、格式化以及在 Unity 场景中创建世界文本等操作。

另外,该工具类大家可以自行添加或修改一些方法方便自己使用。

目录

 1  字符串分割方法

 2  字符串格式化方法

 3  时间格式化方法

 4  大数据格式化方法

 5  创建世界文本方法


 1  字符串分割方法

SplitStr 方法

该方法根据指定的分割类型 splitType 对输入的字符串 str 进行分割,并返回分割后的字符串数组。如果输入字符串为空,则返回空数组。对于一些中文符号(如中文逗号、中文分号、中文冒号),会先将其替换为对应的英文符号,再进行分割。

public enum ESplitType{/// <summary>/// ,/// </summary>Comma,/// <summary>/// ;/// </summary>Semicolon,/// <summary>/// -/// </summary>Line,/// <summary>/// %/// </summary>PercentSigns,/// <summary>/// :/// </summary>Colon,Space,/// <summary>/// |/// </summary>Vertical,/// <summary>/// _/// </summary>Underline,/// <summary>/// ./// </summary>Dot,}
public static string[] SplitStr(string str, ESplitType splitType=ESplitType.Semicolon){if (str == "") return Array.Empty<string>();string newStr = str;switch (splitType){case ESplitType.Semicolon:while (newStr.IndexOf(";", StringComparison.Ordinal) != -1) newStr = newStr.Replace(";", ";");return newStr.Split(';');case ESplitType.Comma:while (newStr.IndexOf(",", StringComparison.Ordinal) != -1) newStr = newStr.Replace(",", ",");return newStr.Split(',');case ESplitType.PercentSigns:return newStr.Split('%');case ESplitType.Colon:while (newStr.IndexOf(":", StringComparison.Ordinal) != -1) newStr = newStr.Replace(":", ":");return newStr.Split(':');case ESplitType.Line:return newStr.Split('-');case ESplitType.Space:return newStr.Split(' ');case ESplitType.Vertical:return newStr.Split('|');case ESplitType.Underline:return newStr.Split("_");case ESplitType.Dot:return newStr.Split(".");default:return Array.Empty<string>();}}

SplitStrToIntArr 方法

该方法调用 SplitStr 方法将输入字符串分割成字符串数组,然后将每个字符串元素转换为整数,最终返回整数数组。如果分割后的字符串数组为空,则返回空的整数数组。

public static int[] SplitStrToIntArr(string str, ESplitType splitType = ESplitType.Semicolon){string[] str1 = SplitStr(str, splitType);if (str1.Length == 0) return Array.Empty<int>();return Array.ConvertAll(str1, int.Parse);}

SplitStrToTwoInt 方法

该方法先使用 splitTypeOne 对输入字符串进行第一次分割,得到一个字符串数组。然后对数组中的每个元素使用 splitTypeTwo 进行第二次分割,并将分割后的前两个整数作为参数传递给回调函数 callBack 进行处理。

public static void SplitStrToTwoInt(string str, ESplitType splitTypeOne, ESplitType splitTypeTwo,UnityAction<int, int> callBack){string[] str1 = SplitStr(str, splitTypeOne);if (str1.Length == 0) return;foreach (var value in str1){int[] other = SplitStrToIntArr(value, splitTypeTwo);if(other.Length==0)continue;callBack.Invoke(other[0],other[1]);}}

 2  字符串格式化方法

SupplementStr 方法

该方法将整数 value 格式化为指定长度 len 的字符串,如果整数的位数不足 len,则在前面补零。

 public static string SupplementStr(int value, int len) => value.ToString($"D{len}");

RetainStr 方法

该方法将浮点数 value 格式化为保留指定小数位数 len 的字符串。

 public static string RetainStr(float value, int len) => value.ToString($"F{len}");

 3  时间格式化方法

StrToHms 方法

public static string StrToHms(int seconds, bool isKeepLen = false, bool isIgnoreZero = false,string hourStr = "时", string minStr = "分", string secStr = "秒"){if (seconds < 0) seconds = 0;int hour = seconds / 3600;int second = seconds % 3600;int minute = second / 60;second = seconds % 60;ResultStr.Clear();if (hour != 0 || !isIgnoreZero){ResultStr.Append(isKeepLen ? SupplementStr(hour, 2) : hour);ResultStr.Append(hourStr);}if (minute != 0 || !isIgnoreZero || hour != 0){ResultStr.Append(isKeepLen ? SupplementStr(minute, 2) : minute);ResultStr.Append(minStr);}if (second != 0 || !isIgnoreZero || hour != 0 || minute != 0){ResultStr.Append(isKeepLen ? SupplementStr(second, 2) : second);ResultStr.Append(secStr);}if (ResultStr.Length == 0){ResultStr.Append(0);ResultStr.Append(secStr);}return ResultStr.ToString();}

SymbolStoHms 方法

该方法是 StrToHms 方法的一个简化调用,使用冒号作为分隔符,强制保持时间数字的固定长度。

 public static string SymbolStoHms(int seconds, bool isIgnoreZero = false) =>StrToHms(seconds, true, isIgnoreZero, ":", ":", "");

 4  大数据格式化方法

GetBigDataToString 方法

该方法根据输入的整数 num 的大小,将其格式化为带有单位(亿、万)的字符串。如果数字大于等于 1 亿,则格式化为以亿为单位的字符串;如果数字大于等于 1 万,则格式化为以万为单位的字符串;否则直接返回原数字的字符串表示。

public static string GetBigDataToString(int num){if (num >= 100000000) return BigDataToStr(num, 100000000, "亿", "千万");if (num >= 10000) return BigDataToStr(num, 10000, "万", "千");return num.ToString();}

BigDataToStr 方法

private static string BigDataToStr(int num, int company, string bigCompany, string littleCompany){ResultStr.Clear();ResultStr.Append(num / company);ResultStr.Append(bigCompany);int tmpNum = num % company;tmpNum /= (company / 10);if (tmpNum != 0){ResultStr.Append(tmpNum);ResultStr.Append(littleCompany);}return ResultStr.ToString();}

 5  创建世界文本方法

CreateWorldText 方法(重载)

public static TextMesh CreateWorldText(Transform parent, string text, Vector3 localPosition, int fontSize,Color color, TextAnchor textAnchor){GameObject gameObject = new GameObject("World_Text", typeof(TextMesh));Transform transform = gameObject.transform;transform.SetParent(parent,false);transform.localPosition = localPosition;TextMesh textMesh = gameObject.GetComponent<TextMesh>();textMesh.anchor = textAnchor;textMesh.fontSize = fontSize;textMesh.color = color;textMesh.text = text;return textMesh;}public static TextMesh CreateWorldText(string text, Transform parent = null,Vector3 localPosition = default(Vector3),int fontSize=20,Color color=default, TextAnchor textAnchor=TextAnchor.MiddleCenter){if(color==default)color=Color.white;return CreateWorldText(parent, text, localPosition, fontSize,color, textAnchor);}

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

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

相关文章

民兵装备管理系统DW-S300|支持国产化、自主研发

民兵装备器材管理系统&#xff08;智装备DW-S301&#xff09;是一套成熟系统&#xff0c;依托互3D技术、云计算、大数据、RFID技术、数据库技术、AI、视频分析技术对RFID智能仓库进行统一管理、分析的信息化、智能化、规范化的系统。 装备接收与登记 民兵装备抵达仓库时&#…

【STM32系列】利用MATLAB配合ARM-DSP库设计FIR数字滤波器(保姆级教程)

ps.源码放在最后面 设计IIR数字滤波器可以看这里&#xff1a;利用MATLAB配合ARM-DSP库设计IIR数字滤波器&#xff08;保姆级教程&#xff09; 前言 本篇文章将介绍如何利用MATLAB与STM32的ARM-DSP库相结合&#xff0c;简明易懂地实现FIR低通滤波器的设计与应用。文章重点不在…

服务器,交换机和路由器的一些笔记

服务器、交换机和路由器是网络中常用的设备&#xff0c;它们的本质区别和联系如下&#xff1a; 本质区别 功能不同 服务器&#xff1a;就像一个大型的资料仓库和工作处理中心&#xff0c;主要用来存储和管理各种数据&#xff0c;比如网站的网页数据、公司的办公文档等&#x…

SpringCloud - Gateway 网关

前言 该博客为Sentinel学习笔记&#xff0c;主要目的是为了帮助后期快速复习使用 学习视频&#xff1a;7小快速通关SpringCloud 辅助文档&#xff1a;SpringCloud快速通关 源码地址&#xff1a;cloud-demo 一、简介 官网&#xff1a;https://spring.io/projects/spring-clou…

【vs2022配置cursor】

Cursor搭配cmake实现C程序的编译、运行和调试的参考地址 cursor下载地址 第一步&#xff1a; 电脑上按爪cmake 第二步&#xff1a;cursor 配置 安装中文 第三步环境变量&#xff1a; D:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.35.322…

C#/.NET/.NET Core技术前沿周刊 | 第 24 期(2025年1.27-1.31)

前言 C#/.NET/.NET Core技术前沿周刊&#xff0c;你的每周技术指南针&#xff01;记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿&#xff0c;助力技术成长与视野拓宽。 欢迎投稿、推荐…

【STM32】通过HAL库Flash建立FatFS文件系统并配置为USB虚拟U盘MSC

【STM32】通过HAL库Flash建立FatFS文件系统并配置为USB虚拟U盘MSC 在先前 分别介绍了FatFS文件系统和USB虚拟U盘MSC配置 前者通过MCU读写Flash建立文件系统 后者通过MSC连接电脑使其能够被操作 这两者可以合起来 就能够实现同时在MCU、USB中操作Flash的文件系统 【STM32】通过…

用语言模型探索语音风格空间:无需情感标签的情 感TTS

用语言模型探索语音风格空间&#xff1a;无需情感标签的情感TTS 原文&#xff1a;Exploring speech style spaces with language models: Emotional TTS without emotion labels 今天我们要说的是 一种无需情感标签的情感TTS。提出了一个基于FastSpeech2的E-TTS框架&#xff0…

基于Ubuntu2404搭建k8s-1.31集群

k8s 1.31 环境初始化安装Container安装runc安装CNI插件部署k8s集群安装crictl使用kubeadm部署集群节点加入集群部署Calico网络配置dashboard 本实验基于VMware创建的Ubuntu2404虚拟机搭建k8s 1.31版本集群&#xff0c;架构为一主一从&#xff0c;容器运行时使用Container&#…

linux的三剑客和进程处理

Linux三剑客&#xff1a; grep&#xff1a;查找 sed&#xff1a;编辑 awk&#xff1a;分析 grep - 正则表达式 [rootlocalhost ~]# grep ^a hello.txt abc grep - 忽略大小写&#xff0c;还有一些场景需要查询出来对应字符串所在的行号&#xff0c;方便我们快速在文件中定位字…

渗透利器:Burp Suite 联动 XRAY 图形化工具.(主动扫描+被动扫描)

Burp Suite 联动 XRAY 图形化工具.&#xff08;主动扫描被动扫描&#xff09; Burp Suite 和 Xray 联合使用&#xff0c;能够将 Burp 的强大流量拦截与修改功能&#xff0c;与 Xray 的高效漏洞检测能力相结合&#xff0c;实现更全面、高效的网络安全测试&#xff0c;同时提升漏…

时间序列分析(三)——白噪声检验

此前篇章&#xff1a; 时间序列分析&#xff08;一&#xff09;——基础概念篇 时间序列分析&#xff08;二&#xff09;——平稳性检验 一、相关知识点 白噪声的定义&#xff1a;白噪声序列是一种在统计学和信号处理中常见的随机过程&#xff0c;由一系列相互独立、具有相同…

CEF132编译指南 MacOS 篇 - 构建 CEF (六)

1. 引言 经过前面一系列的精心准备&#xff0c;我们已经完成了所有必要的环境配置和源码获取工作。本篇作为 CEF132 编译指南系列的第六篇&#xff0c;将详细介绍如何在 macOS 系统上构建 CEF132。通过配置正确的编译命令和参数&#xff0c;我们将完成 CEF 的构建工作&#xf…

deepseek + kimi 高效生成PPT

1.在deepseek中生成ppt大纲 2.将大纲复制到kimi中生成PPT kimi&#xff1a;https://kimi.moonshot.cn/

CSS 属性选择器详解与实战示例

CSS 属性选择器是 CSS 中非常强大且灵活的一类选择器&#xff0c;它能够根据 HTML 元素的属性和值来进行精准选中。在实际开发过程中&#xff0c;属性选择器不仅可以提高代码的可维护性&#xff0c;而且能够大大优化页面的样式控制。本文将结合菜鸟教程的示例&#xff0c;从基础…

【嵌入式Linux应用开发基础】read函数与write函数

目录 一、read 函数 1.1. 函数原型 1.2. 参数说明 1.3. 返回值 1.4. 示例代码 二、write 函数 2.1. 函数原型 2.2. 参数说明 2.3. 返回值 2.4. 示例代码 三、关键注意事项 3.1 部分读写 3.2 错误处理 3.3 阻塞与非阻塞模式 3.4 数据持久化 3.5 线程安全 四、嵌…

进程状态

目录 1.进程排队 硬件的队列 进程排队 2.进程的三大状态 什么是状态 运行状态 阻塞状态 挂起状态 3.Linux系统中的进程状态 4.僵尸状态 5.孤儿进程 1.进程排队 硬件的队列 计算机是由很多硬件组成的&#xff0c;操作系统为了管理这些硬件&#xff0c;通常需要为这…

项目复盘:提炼项目成功与失败的经验

项目复盘&#xff0c;顾名思义&#xff0c;就是在项目结束后&#xff0c;对整个项目过程进行全面、系统、深入的回顾与总结。它不仅仅是对项目成果的简单评价&#xff0c;更是对项目执行过程中所有细节、决策、挑战与解决方案的深入剖析。通过复盘&#xff0c;我们可以清晰地看…

Rhel Centos环境开关机自动脚本

Rhel Centos环境开关机自动脚本 1. 业务需求2. 解决方法2.1 rc.local2.2 rc.d2.3 systemd2.4 systemd附着的方法2.5 tuned 3. 测试 1. 业务需求 一台较老的服务器上面业务比较简单,提供一个简单的网站,但已经没有业务的运维人员. 想达到的效果: 由于是非标准的apache或者nginx…

网络安全威胁是什么

1.网络安全威胁的概念 网络安全威胁指网络中对存在缺陷的潜在利用&#xff0c;这些缺陷可能导致信息泄露、系统资源耗尽、非法访问、资源被盗、系统或数据被破坏等。 2.网络安全威胁的类型 物理威胁系统漏洞威胁身份鉴别威胁线缆连接威胁有害程序危险 &#xff08;1&#x…