Unity は TextMeshPro マルチフォントとマテリアルのホット アップデートを使用します

最近、Unity プロジェクトでのチャットに TextMeshPro が使用されていますが、ストロークのあるフォントとストロークのないフォントをサポートする必要があります。私が考えた解決策は次のとおりです。 TextMeshPro はマルチフォント表示をサポートしており (詳細については、コンポーネントの公式ケースのリンク例を確認してください)、ストロークのあるフォントとストロークのないフォントの 2 つのフォントを作成しました。

ただし、有効にするために追加のフォントを Resources ディレクトリに配置する必要があるという問題があります。この問題を解決するために、TextMeshPro コンポーネントのフォント読み込みのソース コードを確認しました。ホット アップデートを使用できます。リソース フォントを取得し、それを TextMeshPro コンポーネントのフォント マネージャーにキャッシュします。

       BaseAssetAsyncLoader loader = AssetBundleManager.Instance.LoadAssetAsync("fontname", typeof(TMPro.TMP_FontAsset));
        TMPro.MaterialReferenceManager.AddFontAsset((TMPro.TMP_FontAsset)loader.asset);

コードのアイデアは上記の通りで、LoadAssetAsync はホット アップデート リソース読み込みのカプセル化メソッド、TMPro.MaterialReferenceManager はコンポーネント フォント管理クラスです。lua側での呼び出しも同様です。

プログラムの最適化:

これまでのフォントにはストロークのあるものもあれば、ストロークのないフォントもあります。マテリアル プロパティを使用して、同じフォント内で異なるマテリアルを切り替えることもできます。つまり、デフォルトのフォント素材にはストロークがなく、リッチテキストタグを介してストロークのある素材に切り替える必要があります。上記のスキームのリッチ テキスト フォント タグ <font></font> を <material></material> に置き換えるだけです。素材をホット アップデートする必要があるかどうかは、ユーザーのニーズによって異なります。ホット アップデートの考え方はフォントの場合と同じです。メソッド API は次のとおりです。

 TMPro.MaterialReferenceManager.AddFontMaterial

おすすめ

転載: blog.csdn.net/waterdsm/article/details/128701472