【Unity】OSフォントをFallbackFontに設定する

2024/2/21 追記
githubリポジトリを作成・PackageManagerに対応しました。

多言語対応をもっと簡単にしたい!

  • 全言語のフォントをインポート・設定が面倒。

    • 組み込みOKなフォントを探すのが面倒。

      • ユーザのPC内にあるSystem font(OS font)を利用したい。

    • Charactor Setの設定が面倒。

      • Dinamic Fontに頼りたい。

  • ローカライズは公式のLocalizationパッケージが便利そう。

やりたいこと

ベースのFontAssetのFallbackFontAssetsに、各言語のSystem fontをランタイムで追加したい。
TMP_FontAsset.CreateFontAsset()を使いたいが、TextMeshPro 3.0.6では、インポートしたフォント以外は失敗する。

試行錯誤の結果

  • TextMeshPro 3.2.0-pre.6

  • Localization 1.3.2 (とりあえず最新Release)

// Get system font. (Dynamic)
var systemFontPaths = Font.GetPathsToOSFonts();
var systemFontPath = systemFontPaths.FirstOrDefault(v => v.Contains("msgothic"));
var fallbackFontAsset = TMP_FontAsset.CreateFontAsset(
                    systemFontPath,
                    0,
                    90,
                    9,
                    UnityEngine.TextCore.LowLevel.GlyphRenderMode.SDFAA,
                    1024,
                    1024);

// Replace fallback font to system font.
_baseFontAsset.fallbackFontAssetTable.Clear();
_baseFontAsset.fallbackFontAssetTable.Add(fallbackFontAsset);

他言語のFontAssetが不要かつLocationパッケージも問題なく動作した。
ひとまず良い感じ。
各言語のSystem font名はWikipediaとかで調べる。

試行錯誤の経緯

宣伝

アセットストアで便利ツールを販売しています!

お布施も受け付けています!


この記事が気に入ったらサポートをしてみませんか?