【Unity】TextのFont StyleでBoldを使うときの注意点はこれだ!
Textコンポーネントを使わずにゲームを作るってことも中々なくて、多分みんなが使ったことあるコンポーネントだと思います。
そのTextコンポーネント内で、Font Styleとして『Bold』や『Italic』を選択できるのは周知の事実ですが、これを使うときには注意が必要です。
しかも自分でフォントをインポートするときになってから気付きやすい問題点なので、「なんじゃこりゃああああ!」とビビること請け合い。
環境
macOS 10.13 High Sierra
Unity2018.1.0f2
どんな現象が起こるか
まずはこちらをご覧いただこう。Unityデフォルトで使われるフォントである『Arial』を使って表示したText。Font Styleは『Normal』でセットしています。
そしてこちらはFont Styleを『Bold』にしたもの。お分かりいただけただろうか。
正解は、英字部分はちゃんとBoldになっているのに、その他の部分は横に拡大されてしまう、でした。
フォントのインポートについては上の記事で扱ったのですが、これを書き終わった後、インポートしたフォントで『Bold』を選択しても同じように横に拡大されたので「うわぁ……Arialが残念だからインポートの話をしたのに、そのフォントでBold選んでも残念じゃん……やべぇよやべぇよ」と焦って調査したのが今回の出発点。
というかArialだとなんで英字だけ太字になってるのさ。
上の記事の中で使ってみた『M+ 1p』をBoldにするとこんな感じに。
3行目だけ横幅が拡がっています。『M+ 1p』を使った場合、Arialとは違い英字部分も横に拡大されました。なんじゃこりゃあ……。
上の例では『M+ 1p』のRegularを使っていたので、単純にBoldが見つからなかったのかも。そう思って『M+ 1p』のBoldをインポートして再挑戦。
……が、変わらず。
Fontのフィールドに対してダイレクトに『M+ 1p』のBoldを設定すればいい、ってのは確かにそうなんだけど、リッチテキストでBoldタグを含めたいときに上と同じ現象が起きちゃうので避けたいところ。
できればFont StyleのフィールドでRegularとBoldを切り替えたいんです。
Font Styleの動き
調べてみると、どうやらシステムにインストールされたフォントの中に有るか無いかが鍵のようで。
上のUnity Forumでも同じような現象に行き合った人がいました。
Unityのデフォルトで設定されているフォント・Arialの場合、WindowsやMacでは標準フォントとして元からインストールされているので、そのBoldスタイルを見にいっているみたい。
Arialフォント自体は英字のフォントなので、UnityでFont StyleとしてBoldを選んだ場合、システムのArialの英字部分だけ読み取って太字で表示しているようです。
日本語部分は謎のフォントだったらしく、私のMacには存在せず、太字にはなりませんでした。
フォントをインストールして実験
試しに『M+ 1p』のBoldをMacにインストールしてみることに。
フォントファイルを使ってインストールを行い、FontBookでインストールされたことを確認。Windowsだとコントロールパネルのフォントから確認できます。
続いてUnityを再起動。どうやら起動時にシステムにインストールされたフォントを見に行ってるようで、エディタを開きっぱなしだと反映されませんでした。
再起動後、Textコンポーネントの設定を以下のようにしました。
上記設定で画面に表示したものがこちら。
意図通りにBoldになってくれました。
これで問題解決!
……。
……そんなふうに考えていた時期が私にもありました。
リリースするときどうするの?
エディタ上ではうまくいっていますが、リリースするときはどうなるんでしょうね?
ポイントとなるのは、ゲームの実行環境にフォントがインストールされているかどうか。
試しに上記のテキストコンポーネントを表示するゲームをビルドしてみます。
『M+ 1p』のBoldがインストールされている状態なのでエディタと同じように表示されました。
続いて、Unity側の設定を変更せず、インストールされたフォントから『M+ 1p』のBoldをアンインストールした上で同じゲームファイルを実行します。すると横広がり現象が再発。
この結果から言えることは、TextコンポーネントのFont StyleでBold(またはBold Italic)を選択する場合は、ゲームの実行環境に該当のフォントファミリー、そのBoldがインストールされている必要があるということ。
例えばUnityデフォルトのArialの場合、Windows、Macには標準フォントとしてインストールされています。iOSもインストールされていますが、Androidだと入っていないことも多いです。
となると、デフォルトのArialですら、Androidアプリでは正しくBoldを表示してくれないことに。むーん。
なんとキツイ条件でしょうか。
「このゲームを遊ぶには、フォントをインストールしてね!」
なんて感じでリリースしたら各方面から怒られそう。
Boldのフォントを表示したいときには
TextコンポーネントのFont Styleを使うのではなく、プロジェクトにBold用のフォントファイルをインポートしてしまうのが無難かな。
Font Styleの設定だってTextコンポーネント毎のものだから、フォントファイルの違うコンポーネントがあるのと同じです。
動的に変えたいときはスクリプトから変更可能なので、Textフィールドの値を変えるときに一緒にフォントを変えておけば良さそう。
ただ、リッチテキストを使って文中でBoldにするのはちょっと難しいかも。
あとBold用のフォントファイルをインポートする分、ビルドしたゲームの容量が大きくなるのも目を瞑る必要があります。日本語フォントだとファイルサイズが大きいので結構ダメージが……。
まとめ
TextコンポーネントでBoldを使うときに気をつけるべきことをピックアップ。
システムにインストールされたフォントに依存するまさかの仕様だったので、最悪リリースしてから気付くこともあるかも。
最初からBoldのファイルをインポートするのが無難そうです。
ゲーム開発の攻略チャートを作りました!
-
前の記事
【Unity】フォントをインポートして文字を表示する実験 2018.06.07
-
次の記事
【Unity】動的にTextコンポーネントのFontを切り替えるサンプル 2018.06.09
コメントを書く