この記事でのバージョン
Unity 4.6.3f1
Unity 5.1.0f3 Personal
はじめに
今回はUnityエディタ上では大丈夫だったのに、実機に入れたら文字化けした。
という話です。NGUIでもuGUIでもそれ以外でも、iOSでもAndroidでも起こりうる現象っぽいです。
文字化けすると以下のようにマルチバイトの文字が?になります。
Unityエディタ上
なお、この時使用したフォントはArialで、
Unity 4.6.3f1でも5.1.0f3でも発生しました。また実機のOSはiOS9です。
原因
この文字化けの原因は以下の場合と同じです。
iOS 8.2 以降でデバイス内蔵の日本語フォントを使用すると、これに失敗し、フォールバックとして中国語フォント (Heiti) が使用されるという現象が発生します。
つまりArialにマルチバイトの文字が無く、
代わりとして別のフォントを使おうとしたら上手くいってなかったという事です。
以前は問題無かったので、iOSの仕様変更の影響でしょうかね。
対処法1
この問題への対処法で一番簡単なのは日本語が入ったフォントを使う事です。
日本語に対応したフォントを自分でインポートして使えば
フォールバックが発生しないはずなので、問題も起きません。
対処法2
二つ目の対処法は先ほどの記事にもあった、
フォールバックとして使用するフォントを指定することです。
フォールバックはフォントファイルのFontNamesで指定します。
上記の画像はデフォルトとは別にArialのフォントをインポートし、
.Hiragino Kaku Gothic Interfaceをフォールバックに指定した場合です。
この場合だと以下のように日本語だけフォントが変わるようになります。
なお、Incl. FontDataのチェックを外すとそのフォント自体はアプリに入らなくなります。
Incl.Font DataはフォントのTTFをアプリに組み込むかどうかの判定です。チェックが入っていなければデバイスにインストールされているフォントを探して使います(インストールされて無ければフォールバック)。
iOSはこれで問題無いのですが、Androidの場合はさらに面倒で、
端末によってデバイスにインストールされているフォントに差があるそうです。
なので、以下の記事のように複数のフォールバックを指定した方が良いようです。
Font NamesをMotoyaLMaru, MotoyaLCedar, RobotoSansFallback, Droid Sans Fallbackと指定
おわりに
デフォルトのフォントでなく、出来れば日本語対応フォントを自分で入れて使いたい所ですが、
日本語対応だと重いし、何よりフリーフォントの数が少ない……。
有料フォントが気になる今日この頃です(:3っ)∋〜