(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発したゲームです!


TextやTextMeshProのフォントに指定した文字が含まれているか(表示できるか)【Unity】【uGUI】【TextMesh Pro】


このエントリーをはてなブックマークに追加

この記事でのバージョン
Unity 2020.3.25f1



はじめに

今回はuGUIのTextやTextMeshProのフォントに指定した文字が含まれているか

つまりその文字が表示できるかという事をチェックする方法の紹介です!

f:id:kan_kikuchi:20220416065814j:plain

なお、記事中では以下のフォントを使っています。





Textの場合

Textで使っているフォントに指定した文字が含まれているかをチェックするには

FontのHasCharacterというメソッドを使います。

//kという文字が含まれているかチェック
char targetChar = 'k';
var hasCharacter = _text.font.HasCharacter(targetChar);
   
Debug.Log($"フォント{_text.font.name}に {targetChar} という文字が含まれているか : {hasCharacter}");
f:id:kan_kikuchi:20220416060852j:plain


ただ、フォールバックに指定してるフォントも判定に含まれてしまう点には注意が必要です。

(※フォールバック : フォントに含まれない文字だけを違うフォントを使って表示する機能)

//漢という文字が含まれているかチェック(Textに設定されているフォントには含まれているが、フォールバックのフォントに含まれている)
char targetChar = '漢';
var hasCharacter = _text.font.HasCharacter(targetChar);
    
Debug.Log($"フォント{_text.font.name}に {targetChar} という文字が含まれているか : {hasCharacter}");
f:id:kan_kikuchi:20220416060953j:plain



TextMeshProの場合

TextMeshProで使っているフォントに指定した文字が含まれているかをチェックする場合も

FontのHasCharacterというメソッドを使うのですが、FontのクラスはTextとは異なります。

//1という文字が含まれているかチェック
char targetChar = '1';
var hasCharacter = _textMeshPro.font.HasCharacter(targetChar);
    
Debug.Log($"フォント{_textMeshPro.font.name}に {targetChar} という文字が含まれているか : {hasCharacter}");
f:id:kan_kikuchi:20220416065352j:plain


なお、Textとは違いデフォルトではフォールバックのフォントは考慮しません。

//漢という文字が含まれているかチェック
char targetChar = '漢';
var hasCharacter = _textMeshPro.font.HasCharacter(targetChar);
   
Debug.Log($"フォント{_textMeshPro.font.name}に {targetChar} という文字が含まれているか : {hasCharacter}");
f:id:kan_kikuchi:20220416065514j:plain


ただし、第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);