現象
Unityで多言語に対応しようとすると「Arial」というデフォルトのフォントアセットを選択しておけば、システムフォントをよしなに使ってくれるので今まで問題がなかったのですが、iOS13で文字化けする現象が発生してます。
スクリーンショットはiOS13.2.1(iPhone8)です。画面のまん中に[?][?][?][?]となっているところが該当の文字化けです。
調査
UnityのIssueでも報告されていて、タイ語以外にもアルメニア語、グルジア語で文字化けしてしまうようです。
詳しくはIssueの方を見ていただくといいかもしれないです。
実際に調べた結果をまとめます。
- タイ語のフォントをセットすれば問題なく表示されます。
スクリーンショットはiOS13.2.1(iPhone8)です。
- iOS12.4.1では以下の通り普通にタイ語が表示されます。
スクリーンショットはiOS12.4.1(iPhoneXR)です。
- Android10では以下の通り普通にタイ語が表示されます。
- Unityのバージョンも2018.3と2019.1で確認しましたが、同じ結果でした。
他にフォントをフォールバックさせシステムフォントを使う方法やiOSの言語設定をタイ語にするなど試しましたが、変わらずでした。
暫定対応
タイ語対応をしたアプリを公開してますので、Unityの改修を待っていられません。
以下の手順で対応しようと考えてます。
- タイ語フォントを入れ、文字化けを解消
- Unityが対応したらバージョンをあげる
幸いにもタイ語のフリーフォントがありますので、それを使って文字化け解消をします。
少しデフォルトのフォントより細いので、こだわりがあるのであれば代替とはいかないかもしれないです。
GPLフォント例外というライセンスを初めて知りました。クレジット表記をしたらいいのかよくわからなかったので、とりあえず追加しました。詳しい人がいましたら情報をお待ちしてます。
フォントのサイズは480KBでした。もっとフォントサイズが大きくなるかと思ったのですが、これくらいならとあまり神経質にならずに入れてしまいました。できるだけアプリのサイズが小さい方がユーザにとってはいいと思うのでオススメはしません。
以下のような感じで、タイ語に切り替えるタイミングでフォントをセットしました。
text.font = Resources.Load<Font> ("Fonts/THSarabunNew/THSarabunNew");
フォールバックで切り替えるようにしてもよかったのですが、暫定対応なのでコード上で分かりやすくTODO
を書いておきたかったという理由で今回はコードで切り替えてます。
まとめ
原因がUnity側にあるのか、iOS側にあるのかさっぱり分かりませんが、とりあえず暫定対応で切り抜けたという話です。
他の方法を知ってましたら情報をお待ちしています。
追記(2019.11.14)
IssueにUnityからの回答が載ってました。原文はリンクからどうぞ。
要約すると「iOS13でアルメニア語・グルジア語・タイ語のUnityが使用してたデフォルトフォントが削除されたので、uGUIとTextMeshProでレンダリングできなくなってます。将来的にはTextMeshProで対応しますが、現状ではエディタ上でレンダリングされるフォントを用意すればiOSでも動きます。」
やっぱりフォントを用意しないとダメみたいです。
TextMeshProで対応っていうのも悩ましいですね。今のうちに改修するか。
参考
Unity Issue Tracker - [iOS 13.0] Some languages symbols are replaced with a [?] marks
https://issuetracker.unity3d.com/issues/ios-13-dot-0-all-thai-symbols-are-replaced-with-a-marks
フォント - Unity マニュアル
https://docs.unity3d.com/ja/2018.1/Manual/class-Font.html
【Unity】UnityでOSにインストールされてるフォントを使いたい - テラシュールブログ
http://tsubakit1.hateblo.jp/entry/2018/05/30/234314
タイの公的機関が発行する「無料のタイ語フォント」 | タイおん
https://thaion.net/thai-font-sipa
ฟอนต์.คอม » ฟอนต์สารบรรณ ปรับปรุงรุ่นใหม่ “Sarabun New”
https://www.f0nt.com/release/th-sarabun-new/
GPLフォント例外 - Wikipedia
https://ja.wikipedia.org/wiki/GPLフォント例外