あたらしものずきっ!

試してみたものとか、遊んでみたものを色々記してみます。

Unityにおける日本語表示にかんするえとせとら

Unityにおける2D表現ってのは鬼門で、そこに文字の表現が加わると尚更厄介なものです。Unity自体の操作に熟知していない場合等は、ゲームオブジェクトを只管くっつけて文字っぽく見せたり等もありますが、正直スマートではないです。

日本語のスマートな表示を行う場合、以下の2パターンが考えられます。

  • UI系Assetからラベルなどを使う
  • UnityからiPhoneのネイティブコードを実行する

UI系Assetからラベルなどを使う

Asset StoreにはUI作成に欠く事ができないAssetが山ほど存在しており、これを巧く利用すると文字の表現もあっさりとうまくいきます。ただし、UI系Assetでの文字表現にはビットマップ化したフォントが必要になります。

ビットマップ化フォント作成ツールにも幾つかありますが、フリーな作成ツールとしてはJava製でHieroというものがあります。が、どうもバグなのか正常に動作しなくなっています。代わりにUI系AssetへのGoodな対応やら処理中に落ちたりしないという点をとって、GlyphDesignerを現在愛用しています。

そして、作成したビットマップ化フォントを使うためのUI系Assetですが、最近流行のNGUIは一押しです。ドロー系ソフトの感覚でボタンなどのサイズ・色等の調整ができます。ただ、このAssetが要求してくるHierarchy構成が少々変わり物で、すでにHierarchy構成がかっちり固まっている場合はそれなりに手間が発生してくる可能性もあり。

UnityからiPhoneのネイティブコードを実行する

iOSのUIKitを利用して日本語表示を行います。iPhoneなどで入力出来る文字が全て使えるため、多国語言語表示対応等で使える文字数に制限を入れたくない場合は必須になります。

実行に当たっては、

  • ネイティブコードを書いたファイル
  • ネイティブコードをUnityから呼び出すための関数を定義してあるファイル

の二つが最低限必須です。

ファイルを作成してみると分かると思いますが、実行すると Unity側レイヤ ・ UIKit側レイヤ という2つのレイヤー構成が出来上がります。ゲーム処理はUnity側のみ、UIもとい文字はUIKit側のみで扱われ、Unityからの命令が自動でUIKit側へ飛ぶことはありません(逆もしかり)。UIKit側でUnity側からの命令を個別対応するための処理を、独自に作成する必要がでてくるわけです(これまた逆もしかり)。そして、Unity側とUIKit側が自動で連携していない結果、単純にシーン遷移をするととても残念なことになります。

全ての文字表現がUIKitで出来ればそれがベストなのですが、手間を考えるとピンポイントで使うのが一番です。また、この方法はUnity側のAssetでの影響をそこまで受けません。利用範囲を狭めればプロジェクト構成が固まった後からでも導入はしやすいかもしれません。