見出し画像

【VRChat】Emptyフォントでワールドを軽量化しよう

フォントは大容量

SDK3.6.1からTextMeshPro系のコンポーネントが追加され、さらにTMPが使いやすくなりました。LegacyなTextに必要だったスケール0.01倍が不要など、TextMeshProには多くの魅力がありますが、一つ欠点があります。それはデフォルトフォントの「LiberationSans SDF」に日本語が含まれていないことです。そのためフォントアセットを作成する必要があり、ワールド容量増加の一因となります。
そこで今回はEmptyなフォントを使用することで日本語表示可能なVRChat内蔵のフォールバックフォントを利用する方法を解説します。

フォールバックフォントを使おう

TextMeshProにはフォントアセットで表示できない文字をフォールバックする機能があるので、一文字も収録していない空のフォント(以下Emptyフォント)を使用するとすべての文字をフォールバックできます。VRChatクライアントにはNotoフォントが内蔵されているので日本語も正しく表示することができます。

Unityでの設定方法

ウィンドウ>TextMeshPro>フォントアセットクリエーターを開きます。

開くと下のウィンドウが出てくるので、次のように設定します。

  1. 「Source Font File」を任意のフォントに設定

  2. 「Atlas Resolution」を8x8に設定

  3. 「Character Set」を「Custom Charecters」に設定し、「Custom Character List」が空であることを確認

設定例

「Generate Font Atlas」をクリックすると一瞬で生成が終わるので、「Save as…」をクリックし、名前を「Empty」などにして保存します。

保存出来たら、全てのTextMeshProに対してEmptyを設定します。一つでも指定されているフォントは全てアップロードされるのでご注意ください。
注意:この作業はアセットを破壊する可能性があるため、必ずバックアップを取ってから行ってください。

「Font Asset」にEmptyを指定

Tips: ヒエラルキーの検索窓に「TextMeshProUGUI」と入力するとすべてのTextMeshProコンポーネントがアタッチされたGameObjectが出てきます。

TextMeshProコンポーネントがアタッチされたGameObject

しかし、この設定だとUnity上で文字化けするという問題があります。そこでUnity上でのフォールバックフォントを設定します。
プロジェクト設定を開きます。

「プロジェクト設定」を開く

TextMesh Pro>設定を開き、「Fallback Font Assets List」に日本語が収録されたフォントアセットを指定します。Notoフォントにフォールバックされるため、UnityでもNotoフォントを使用することをお勧めします。(Notoフォントの生成方法は割愛させていただきます)

「Fallback Font Assets List」にNotoフォントを指定

以上で設定は完了です。TextMeshProに標準搭載の「LiberationSans SDF」に日本語が含まれていた場合もフォールバックしてくれます。

上:LiberationSans SDF 下:Empty

設定後の確認

設定後はワールド容量が減ったか確認しましょう。設定ミスなどで一つでも誤ったフォントアセットが指定されていると、容量削減に失敗します。
正確に確認したい方は「VRworld Toolkit」を使用し確認することをお勧めします。VCCのPackageリストにすでに入っているので「Manage Project」からインポートしましょう。
インポートが完了したらVRWorld Toolkit>World Debuggerを開きます。

World Debuggerを開く

「Build Report」を開きます。
注:インポート後一度もビルドしていないと表示されません。

Build Reportの表示例

フォントは大容量なので(2回目)Size順に表示して1.0MBまでになければOKです。私のワールドはビリヤードを設置しているので1.0MBのCalistogaフォントがありますが、見た目を破壊するほどではないのでそのままにしてあります。

参考・ライセンス情報

タイトル画像:Noto Sans Japanese

参考

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