【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とかで調べる。
試行錯誤の経緯
TextMeshPro 3.2.0-pre.6を選んだ理由
3.2.0-pre.1はなぜかTextが真っ白になった。
3.2.0-pre.7はVisions OS周りのエラーが出た。
4.0.0-pre.2はTMP_FontAssetがFontAssetになるのでLocalizationパッケージ側にエラーが出る。
4.0.0-pre.2は主にUI Tool Kit向けの対応っぽい。
見たページ
宣伝
アセットストアで便利ツールを販売しています!
お布施も受け付けています!
この記事が気に入ったらサポートをしてみませんか?