UnityEngine.UI.Text
は英語をいい感じで表示するためなのか、
Rect の領域からはみ出る場合 スペースがあるとその位置で改行されてしまう
日本語では基本的にスペースを利用することが少ないが、
「鹿目 まどか」や「暁美ほむら」など人物名を表示する場合に姓名の間に、スペースを入れることがある
そのため、意図しないところで改行が入ってしまうことがある
そこで改行されないスペース
を入れることが改行されないようにする
改行されないスペース
正しくは「ノーブレークスペース」と呼ばれています
コンピュータにおいて、ノーブレークスペース (no-break space, non-breaking space, NBSP) は、スペースの箇所での自動的な改行(行の折り返し(英語版))を防ぐ特殊なスペースである。ノンブレーキングスペース(non-breaking space)、ハードスペース(hard space)、固定スペース(fixed space)とも呼ばれる。HTMLのようにホワイトスペース文字(英語版)の並びを1つのスペースにまとめるシステムで、行内に複数のスペースを入れるために使うこともできる。
html
では
と表記されるやつで、C#は Unicode で扱うため \u00A0
を利用する
以下のような Text 拡張を入れておくとスペースが常にノーブレークスペースに変換されるため便利ではあるが、string.Replace
は新しい string を返すため 頻度が高かったり、長いテキストでは無駄にメモリを食ってしまうことになるので必要な箇所のみで利用するか、もともとのデータに ノーブレークスペースを入れておくべきです
public static class TextExtension { public static void SetText(this Text self, string text) { self.text = text.Replace(" ", "\u00A0"); } }
これにより姓名間にスペースを入れても改行されなくなりました