TextMeshProのFontAsset

Unityでテキストを表示する場合、TextMeshProが標準的に使用されます。

その際事前にFontAssetを作成しておく必要がありますが、含まれる文字は生成元のフォントファイルに依存します。

フォントによっては第二水準以上の漢字などが含まれていない場合があります。

含まれていない文字を表示した場合

日本語を含んでいないFontAssetを使用して以下の文字列を表示しようとすると

01:啄木鳥
02:不如帰

以下のように、表示できない文字は□で表示されます。

文字がフォントアセットに含まれているか確認する

TMP_FontAssetクラスには指定した文字が含まれているか確認するメソッドが用意されています。

文字ごとに確認する

以下のようなスクリプトを用意します。

using TMPro;
using UnityEngine;

public class FontChecker : MonoBehaviour
{
    [SerializeField] private TMP_FontAsset _fontAsset;
    
    private void Start()
    {
        Check("01:啄木鳥02:不如帰");
    }

    private void Check(string text)
    {
        foreach (var c in text)
        {
            if (!_fontAsset.HasCharacter(c))
            {
                Debug.Log($"Missing character : {c}");
            }
        }
    }
}

TMP_FontAssetHasCharacterメソッドに文字を渡すと、文字が含まれている場合trueを返します。

falseが返ってくる場合は文字が含まれていないことになります。

まとめて確認する

HasCharacterメソッドでは、文字列中の文字を1つずつ渡して判定していました。

HasCharactersメソッドを使うことで文字列のまま渡してまとめて確認することができます。

using TMPro;
using UnityEngine;

public class FontChecker : MonoBehaviour
{
    [SerializeField] private TMP_FontAsset _fontAsset;
    
    private void Start()
    {
        Check("01:啄木鳥02:不如帰");
    }

    private void Check(string text)
    {        
        if (!_fontAsset.HasCharacters(text, out var missingCharacters))
        {
            foreach (var missingCharacter in missingCharacters)
            {
                Debug.Log($"Missing character : {missingCharacter}");
            }
        }
    }
}

結果はHasCharacterの時と同じになります。

まとめ

今回はFontAssetに文字が含まれているか確認する方法について解説しました。

ノベルゲームなど大量に文字列を扱うゲームを開発する際に

エディタ拡張としてメニューから実行しておくと便利かもしれません。

不足している文字が見つかったらFontAssetに含める文字に追加するか、

フォントファイルを変更するかしましょう。

📣おしらせ!

Unity Asset Storeで BLACK FRIDAY セール が開催中です。

300以上の人気アセットを50%オフで購入するチャンス。

フラッシュセールでは最大95%オフも?

セールは 2025年12月11日午前1時(日本時間)に終了します。

🔗関連ページ