Unity 6.0からUnity 6.1へプロジェクトをバージョンアップしたところ、UI Toolkitで作成した画面の日本語が表示されなくなる問題が発生しました。
英数字は正常に表示されるのに、日本語だけが表示されないという状態です。
調べていくと、UI Toolkitで使用しているフォント設定が原因でした。
この記事では、今回実際に発生した問題と、その解決方法を紹介します。
同じように Unity 6.0からUnity 6.1へ移行して、UI Toolkitの日本語が表示されなくなった方の参考になれば幸いです。
Unity 6.0から6.1へバージョンアップ
今回、Unity 6.0で開発していたプロジェクトを、Unity 6.1へ移行しました。
使用していたUnityのバージョンは、
- 移行前:Unity 6000.0.58f2
- 移行後:Unity 6000.1.17f1
です。
Unity HubからプロジェクトをUnity 6.1で開き、必要なパッケージなどを更新したあと、プロジェクトを確認しました。
すると、UI Toolkitで作成していた画面に問題が発生しました。
UI Toolkitの日本語だけが表示されない
画面を確認すると、英数字などは正常に表示されています。
しかし、日本語の文字が表示されません。
例えば、
Summary
2025年9月
収入
支出
残高
といったUIを作っていた場合、
Summary→ 表示される2025→ 表示される年→ 表示されない収入→ 表示されない支出→ 表示されない
という状態になりました。
アプリが起動しないわけではありません。
UIそのものも正常です。
日本語の文字だけが表示されないという問題でした。
最初に疑ったのはLabelのフォント設定
最初は、日本語が表示されないLabelにフォントを設定すればよいのではないかと考えました。
UI BuilderでLabelを選択し、Fontを確認します。
そこで日本語を表示できるFont Assetを指定すると、日本語が表示されるようになりました。
つまり、
日本語に対応したFont Assetを指定すれば、日本語を表示できる
ことが分かりました。
ただし、この方法には問題があります。
Labelがたくさんある場合、一つ一つのLabelにFontを設定していくのは大変です。
そこで、もっと上位の設定を確認しました。
原因はUI ToolkitのThemeのフォント設定
今回のプロジェクトでは、UI Toolkitのテーマとして、
DarkTheme.ussLightTheme.uss
を使用していました。
UI Toolkitでは、Theme Style SheetでUI全体のスタイルをまとめて設定できます。
そこで、Dark ThemeとLight Themeのフォント設定を確認しました。
すると、ここで使用されているフォントが、日本語表示に対応していないことが分かりました。
つまり、今回の問題は、
Unity 6.1へ移行したことで、UI ToolkitのThemeで使用されるフォント設定が日本語表示に対応していない状態になっていた
ことが原因でした。
解決方法
今回の解決方法は非常にシンプルです。
日本語を表示できるFont Assetを用意し、それをDarkTheme.ussとLightTheme.ussのFontに設定します。
1.日本語対応のFont Assetを用意する
まず、日本語を表示できるFont Assetを用意します。
UnityのUI Toolkitで日本語を表示する場合、英数字だけのフォントではなく、日本語のグリフを含んだFont Assetが必要になります。
すでにプロジェクト内に日本語用のFont Assetがある場合は、それを利用できます。
2.Dark Themeのフォントを変更する
UnityでUI Builderを開きます。
Dark Themeで使用しているTheme Style Sheetを確認します。
今回の場合は、
DarkTheme.uss
です。
ThemeのFont設定を、日本語を表示できるFont Assetに変更します。
3.Light Themeのフォントも変更する
同様にLight Themeについても設定します。
LightTheme.uss
を確認し、Fontに日本語対応のFont Assetを指定します。
Dark Themeだけ変更すると、Light Themeに切り替えたときに再び日本語が表示されなくなる可能性があります。
そのため、
Dark ThemeとLight Themeの両方を設定する
ことが重要です。
Labelごとにフォントを設定する必要はない
今回、最初は日本語が表示されないLabelに対して、個別にFontを設定していました。
UI BuilderでFontを変更すると、日本語が表示されるようになりました。
ただし、最終的にはLabelごとに設定する方法ではなく、Theme側のFontを変更しました。
この方法なら、UIにLabelが大量にあっても、一つ一つ設定する必要がありません。
例えば、
画面A
├─ Label
├─ Label
├─ Button
└─ Label
画面B
├─ Label
├─ Label
└─ Button
というように大量のUIがあったとしても、Theme側でフォントを設定しておけば、共通のフォント設定を利用できます。
これはUI Toolkitを利用する場合にはかなり重要なポイントだと思います。
UXMLのLabelを直接変更する方法もある
今回の調査では、UI BuilderでLabelのFontを変更すると、UXMLファイルにもフォント指定が追加・変更されることを確認しました。
例えば、UXMLではフォントに関する設定として、
-unity-font-definition
が使用されます。
既存のLabelにこの指定がなかった場合、Labelごとにフォントを指定する方法もあります。
しかし、今回のようにプロジェクト全体で日本語を使用するのであれば、
Labelごとに設定するより、Theme Style Sheet側で共通のFontを設定する
ほうが管理しやすいでしょう。
Unity 6.1へ移行したときに確認したいポイント
今回の問題から、Unityのバージョンアップ時には、単純に「コンパイルエラーがないから移行完了」と考えないほうがよいと感じました。
特にUI Toolkitを利用している場合は、次のような項目を確認するとよいでしょう。
UI Toolkitの確認項目
- 日本語が正常に表示されるか
- 英数字が正常に表示されるか
- Buttonの文字が表示されるか
- Labelの文字が表示されるか
- Dark Themeで正常に表示されるか
- Light Themeで正常に表示されるか
- Font Assetが正しく設定されているか
- Theme Style SheetのFont設定が正しいか
- UXMLの表示が以前と変わっていないか
特に、
「英数字は表示されるのに日本語だけ表示されない」
という場合は、フォント設定を確認してみることをおすすめします。
Unity 6.0から6.1への移行で日本語が表示されなくなった場合のまとめ
今回の問題では、Unity 6.0からUnity 6.1へ移行したあと、UI Toolkitで日本語が表示されなくなりました。
最初はLabelごとにFontを指定することで日本語が表示されることを確認しました。
しかし、プロジェクト全体のUIを考えると、Labelごとに設定するよりもTheme Style SheetのFontを変更するほうが適切でした。
今回の解決方法をまとめると、
- 日本語を表示できるFont Assetを用意する
- UI ToolkitのTheme Style Sheetを確認する
DarkTheme.ussのFontを日本語対応Fontに変更するLightTheme.ussのFontも日本語対応Fontに変更する- 実際の画面で日本語が表示されることを確認する
という手順になります。
おわりに
Unityのバージョンアップでは、スクリプトのエラーだけではなく、UIの見た目やフォントなど、実際に画面を動かしてみないと分からない問題が発生することがあります。
今回も、Unity 6.1への移行後にアプリを確認して初めて、日本語が表示されなくなっていることに気付きました。
もしUnity 6.0からUnity 6.1へ移行したあと、
「英数字は表示されるのに、日本語だけ表示されない」
という症状が発生した場合は、まずUI ToolkitのFont AssetとTheme Style SheetのFont設定を確認してみてください。
Labelを一つずつ修正する前に、DarkTheme.uss や LightTheme.uss のFontを確認することで、まとめて解決できる可能性があります。
今回のようなUnityのバージョンアップで発生した問題は、今後のUnityアップデートでも役立つように、私自身も記録として残していきたいと思います。
コメント