この記事でのバージョン
Unity 2020.3.25f1
はじめに
今回はuGUIのTextやTextMeshProのフォントに指定した文字が含まれているか、
つまりその文字が表示できるかという事をチェックする方法の紹介です!
なお、記事中では以下のフォントを使っています。
Textの場合
Textで使っているフォントに指定した文字が含まれているかをチェックするには
FontのHasCharacterというメソッドを使います。
//kという文字が含まれているかチェック char targetChar = 'k'; var hasCharacter = _text.font.HasCharacter(targetChar); Debug.Log($"フォント{_text.font.name}に {targetChar} という文字が含まれているか : {hasCharacter}");
ただ、フォールバックに指定してるフォントも判定に含まれてしまう点には注意が必要です。
(※フォールバック : フォントに含まれない文字だけを違うフォントを使って表示する機能)
//漢という文字が含まれているかチェック(Textに設定されているフォントには含まれているが、フォールバックのフォントに含まれている) char targetChar = '漢'; var hasCharacter = _text.font.HasCharacter(targetChar); Debug.Log($"フォント{_text.font.name}に {targetChar} という文字が含まれているか : {hasCharacter}");
TextMeshProの場合
TextMeshProで使っているフォントに指定した文字が含まれているかをチェックする場合も
FontのHasCharacterというメソッドを使うのですが、FontのクラスはTextとは異なります。
//1という文字が含まれているかチェック char targetChar = '1'; var hasCharacter = _textMeshPro.font.HasCharacter(targetChar); Debug.Log($"フォント{_textMeshPro.font.name}に {targetChar} という文字が含まれているか : {hasCharacter}");
なお、Textとは違いデフォルトではフォールバックのフォントは考慮しません。
//漢という文字が含まれているかチェック char targetChar = '漢'; var hasCharacter = _textMeshPro.font.HasCharacter(targetChar); Debug.Log($"フォント{_textMeshPro.font.name}に {targetChar} という文字が含まれているか : {hasCharacter}");
ただし、第2引数のsearchFallbacksをtrueにすればフォールバックのフォントも考慮する事が出来ますし、
第3引数のtryAddCharacterをtrueにすれば文字がない場合に追加する事も出来ます。
var hasCharacter = _textMeshPro.font.HasCharacter(targetChar, searchFallbacks:true, tryAddCharacter:true);
さらにHasCharactersという
指定した文字列の内の全ての文字が含まれているかチェックするメソッドもあります。
//漢字の両方の文字が含まれているかチェック string targetText = "漢字"; var hasCharacters = _textMeshPro.font.HasCharacters(targetText);