この記事でのバージョン
Unity 2022.3.32f1
はじめに
普通のフォントは文字ごとに幅が違うので、金額等を並べると
カンマの位置がズレてちょっと不格好な感じになってしまいます。
こういう時、TextMesh Proならmspaceを使えば一部分だけ幅を固定できるのですが、
ただ、カンマや円など全ての文字が変わってしまうので、一括には設定できません。
つまり数字部分だけタグで囲いたいので、↓のようにしたいわけです。
"<mspace=0.55em>12</mspace>,<mspace=0.55em>345</mspace>円"
今回はこれを簡単に行えるメソッドを作ってみました。
指定された文字列を数字の所だけ等間隔にする
さっそくですが、指定された文字列を数字の所だけ等間隔にするメソッドは以下の通りです。
一応、仕組みについても説明しておくと、
正規表現で「1桁以上の連続した数字列」を抽出し、それをタグで挟んでいる感じです。
/// <summary> /// 指定された文字列を数字の所だけ等間隔にする /// </summary> public static string FormatNumbersWithSpacing(string text, float space = 0.55f) { return System.Text.RegularExpressions.Regex.Replace(text, @"(\d+)", $"<mspace={space}em>$1</mspace>"); } /// <summary> /// 指定された文字列を数字の所だけ等間隔にする(ref) /// </summary> public static void FormatNumbersWithSpacing(ref string text, float space = 0.55f) { text = System.Text.RegularExpressions.Regex.Replace(text, @"(\d+)", $"<mspace={space}em>$1</mspace>"); }
使い方は以下のように変換したい文字列を渡すだけ。
(上記のメソッドをTextUtilityというStaticクラスに実装している感じ)
string text = TextUtility.FormatNumbersWithSpacing("12,345円"); //refバージョン //string text = "12,345円"; //TextUtility.FormatNumbersWithSpacing(ref text);