欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > U3D游戏开发之自制文本工具类

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

2025/2/13 8:03:34 来源:https://blog.csdn.net/2303_76354097/article/details/145601825  浏览:    关键词: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);}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com