やりたいこと
UnityでGUIに日本語を表示しようとしたときに□が表示され正しく表示されないときの対処法です。

↑のように表示されます。
対策
TMPでなくLegacyを使用
UnityではTMP(TextMeshPro)とLegacyの2種類の文字のUIが用意されています。
上で書いた問題はTMPで起こるので、代わりにLegacyを使用することで日本語が表示できます。


TMPはLegacyではできないグラデーションなどの表示ができますが、多くのGUIではLegacyで十分なように思いますので、TMPの機能が不要な場合はこの対策で十分です。
(ただしもとから入っているフォントの日本語はかなりいまいちです。Microsoft Yaheiとかいうフォントのようです)
変な例:

2021.3.44f1だと初期のデフォルトはarialで変更も可能です。
そのためこの回避策はかなり有効な手段になりました。
フォントの設定(TMP)
“Unity 日本語 文字化け”で検索するとこちらの方法が出てきます。
TMPのフォントは初期値で日本語で表示できないようなので、表示できるフォントを作成/設定します。
注意
下の記事で紹介されているフォントを含め多くのフォントにはSIL OFLというライセンスが使用されており、無料で使用できますが使用にはライセンス表示が必須です。

ざっと説明
Window(メニュー) → TextMeshPro → Font Asset Creator

赤枠内に事前にインポートしたフォント(ttf,otf)を赤枠に設定
オレンジ枠内は下のように設定
黄色枠内にhttps://gist.github.com/kgsi/ed2f1c5696a2211c1fd1e1e198c96ee4のjapanese_full-txtの中身をすべて貼り付ける。

GeteneteFontAtlasをクリック(結構時間かかります。10分ぐらい?)
SaveをクリックしてAssets内にセーブ。
TextMeshProのFontAssetsから選択できるようになり、日本語が表示可能です。
作ったフォントアセットは他プロジェクトに流用可能?
色々調べたり試したりしましたが、方法は見つかりませんでした。
(assetファイルにIDが入っているっぽい)
結果
Unityで日本語の表示方法を2つ紹介しました。
Legacyを使用することで日本語が表示できるようになりました。
いい点:
簡単
悪い点:
フォントが変なので別フォントを使用する必要性が高い
高度な表示ができない。

TextMeshPro(TMP)ではフォントアセットを作成することで日本語を表示できました。
いい点:
高度な表示ができる
悪い点:
手順が複雑
ファイルサイズがでかい
コメント