Windows上ではUTF16にすればすぐに描画できるが、Unity3.XのAndroidはダイナミックフォントに対応していないので、フォントの生成もする必要がある(Unity4では対応するらしい)。
Xperia Tablet Sで日本語の描画ができない(2012/11/28追記)
SH-12C、HTC EVO 3Dでは動作していた日本語描画が、Xperia Tablet Sで失敗。原因は、フォントのテクスチャサイズが2048x2048以下じゃないと描画できないことだった。(SH-12CとHTC EVO 3Dは4096x4096まで対応)
対応方法は、2048x2048で収まるフォントに差し替えるか、FontのインスペクタのFont Sizeを、テクスチャが2048x2048になるまで小さくすること。M+FONTSの場合、10が上限。
日本語を自由に使うには、やはりUnity4にした方がいいみたい。
フォントの準備
完全フリーのフォント「M+FONTS」を使ってみる。
- M+FONTSのサイトのDOWNLOADから「M+ TESTFLIGHT」をダウンロードする。
- 7zipなど、xzフォーマットに対応している解凍ソフトを入手。
- 7zipだと、デスクトップに置くと解凍しづらいので、c:\tempなどに移動してから解凍。
- tarファイルが出来上がるので、もう一度解凍すると、フォントの入っているフォルダが作成される。
Unityに組み込み
- 入手したフォントフォルダを開いて、好きなトゥルータイプフォント(.ttf)を、Unityのプロジェクトビューにドラッグ&ドロップして追加する。
- インスペクタで以下のように設定。
- FontSize:20(SH-12Cだと、これより大きいサイズでは正常に描画されなかった)
- Font Color:白のままでよい。MaterialやGUI Skinで、使用時に変更可能。
- Character:Androidで日本語を使う場合はUnicodeを選択。
- Font Rendering:そのままでよい。出来上がりを見て調整すればよい。
- 2.x Font Placing:チェックは入れない。
- Unity3.Xでは文字の縦方向の位置にAscent情報を利用するようになった。Unity2.Xの状態に戻したい場合にチェックを入れる(らしい)。
- 設定が完了したら「Apply」ボタンを押して更新する。
以上で、フォントとして使用できるマテリアルとテクスチャが、読み込んだフォントの子供として出来上がる。
OnGUI()内で利用
- スクリプトを作成。
- スクリプトをメモ帳などで開き、「Unicode(big endian)」(UTF-16 big endian)に文字コードを変更して保存する。
- スクリプトをエディタで開き、パブリック変数でGUIStyleを定義。
public GUIStyle myGUIStyle;
- スクリプトを適当なゲームオブジェクトに割り当てて、そのオブジェクトのインスペクタを表示。
- myGUIStyleのFont欄に、読み込んだフォントをドラッグ&ドロップする(FontSize,FontStyleは変更できないのでそのままにしておく)。
- スクリプトのOnGUI()内で、myGUIStyleを指定して文字を描画する。
void OnGUI() { GUI.Box(new Rect(0,0,100,100),"ABC\nあいうえお\n諸行無常",myGUIStyle); }
- 文字の色変更は以下のように、GUIStyleのnormal.textColorを変更する。
void OnGUI() { myGUIStyle.normal.textColor = new Color(255,200,200); GUI.Box(new Rect(0,0,100,100),"ABC\nあいうえお\n諸行無常",myGUIStyle); }
注意点
GUIText / 3DTextの利用
OnGUI()を使わずに文字を描画したり、文字サイズを変更したりするために、GUITextや3DTextを利用する場合も、上記で読み込んだフォントが利用できる。
- GUI Textを使う場合は、「GameObject」→「Create Other」→「GUI Text」。3D Textを使う場合は、「GameObject」→「Create Other」→「3D Text」で、ゲームオブジェクトをシーンに追加する。
- オブジェクトを選択して、インスペクタの「GUIText」や「Text Mesh」の項目の「Font」欄に、読み込んだフォントをドラッグ&ドロップする。
- インスペクタの「Mesh Renderer」欄の「Materials」から「Font Material」を選択して、もう一度同じ「Font Material」を選択し直す。
- 3D Textでは、「Character Size」を変更することで文字サイズを変えられる。
以上で日本語対応完了。こちらも「Font Size」と「Font Style」は変更できないので注意。
GUIText / 3DTextの文字色の変更
新しくマテリアルを作成して、そのマテリアルを設定する。
- プロジェクトに新しいMaterialを追加する。
- MaterialのShaderを「GUI/Text Shader」にする。
- 作成したMaterialのテクスチャに、フォントの下に作成されている「Font Texture」をドラッグ&ドロップして割り当てる。
以上で作成したマテリアルをGUI Textや3D TextのMesh Rendererに設定し直して、割り当てたMaterialのcolorを変更する。
参考URL
- Unityで日本語フォントを使う(モバイル編) , http://radiumsoftware.tumblr.com/post/4107015526 , RADIUM SOFTWARE
- GUIやテキスト表示で日本語を使う方法とフォント埋込みについて , http://d.hatena.ne.jp/nakamura001/20110615/1308153980 , 強火で進め
- M+FONTS , http://mplus-fonts.sourceforge.jp/mplus-outline-fonts/