【TextMeshPro】<material>タグで使うフォントマテリアルをResouces以外の場所に置く

前提:<material>タグ?


TextMeshProの<material>タグを使うとテキスト内の一部に指定したマテリアル(shader)に適応することが出来ます。

ここだけ<material="testTmproMaterial">マテリアル</material>を適応してるよ

このとき使うマテリアルは、TMP SettingsのDefault Font Asset に設定された
Resoucesフォルダ配下に予め配置しておく必要があります。(デフォルトだとResouces/Fonts & Materials/配下になります。)


しかしResouces配下におかないといけないというのは不都合が出てくる場合があります。
Addressableの登場から昨今はResoucesを積極的に使う現場は少なくなっているかと思います。
仮にフォントファイルをAddressableで管理した場合、
このフォントマテリアルもAddressable側に配置しないと二重でメモリに読み込まれたりといった問題も発生するようです。

本題:フォントマテリアルをResouces以外から読み込めるようにする

MaterialReferenceManager.AddFontMaterialを使って実行時にマテリアルを読み込む事で、
Resouces以外の場所にあるフォントマテリアルを使う事ができます。

public class TestTmproMaterial : MonoBehaviour
{
    [SerializeField] private Material mat; //今回は単純にしたいので設定したいマテリアルをここにアタッチしてます

    void Start()
    {
        int hashCode = TMP_TextUtilities.GetSimpleHashCode(mat.name); //GetHashCodeではないので注意
        if(!MaterialReferenceManager.TryGetMaterial(hashCode, out Material tmpMat))
    {
            MaterialReferenceManager.AddFontMaterial(hashCode, mat);
    }
    }
}