Unity4.5やらの時代で開発していたときの話なので、もしかしたら事情が変わってるかもしれません。
Unityではフォントを指定する際にArialを指定する事でシステムフォントを利用できます。
システムフォントは全ての端末に間違いなく存在しフォントが読み込めない…という事を防ぐことが出来ます。
この記事は書きかけ…というか実機での確認がとれていません。おそらく実機用意できないのでずっと確認できないです…
これでうまくいったとか、いかなかったなんかの情報があるとありがたいです。
この記事は以下の記事を参考にしています。というか以下の記事そのものです。
UnityのArialフォントがAndroid実機上で表示されない場合がある
Arialによるシステムフォントの問題点
このArialによるフォントの指定には問題点があります。
というのもこのシステムフォントで利用されるものが具体的にどういったフォントなのかが不明なのです。言い換えれば端末によってマチマチという事です。
スマートフォン向けで作っていたときに一部の端末で日本語が表示されないという不具合が発生しました。
それはこの「システムフォント」で読みこまれているフォントが日本語に対応していないものだったために発生していました。
対策
実際問題日本語に対応していない端末は、少なくとも日本で発売されているものには存在しません。システムフォントの中にも日本語対応しているものがあるはずです。
デフォルトで読みこまれるフォントが日本語非対応なだけ、なのでUnity側で日本語対応しているシステムフォントを読み込むように指定する事で対応できます。
設定方法
設定にはまず適当なフォント(拡張子.ttf)を用意します。
これは設定を利用するだけで、中身は使わないのでなんでもいいです。
追加できたらインスペクターで設定します。
Font Size
これは1文字のテクスチャに占める大きさを指定します。
大きくすれば綺麗に出ますが、容量や増えたり速度が低下したりがあり得ます。
今回は関係ありません。
Rendering Mode
フォントのスムースに関する指定です。
今回は関係ありません。
Character
フォント内に含む文字の指定です。
特に理由が無ければDynamicです。
今回は関係ありません。
Incl. Font Data
フォントの実際の画像データをアプリ内に含むかの指定です。
このフォントを使いたいわけではないのでチェックを外してください。
Font Names
フォントが読み込めなかった際に代わりに読み込むフォントの指定です。
「.Hiragino Kaku Gothic Interface,MotoyaLMaru, MotoyaLCedar, RobotoSansFallback, Droid Sans Fallback」
を指定してください。
デフォルトをこのフォントに変えるには
少しググりましたが、uGUIのTextや3D Text等々にデフォルトで設定されているフォントの変更はできないようです。
というわけで、「UnityのHierarchyのCreateに項目を追加する」を利用して、Createのところに独自のフォントを追加するといいです。
using UnityEngine; using UnityEngine.UI; using UnityEditor; public class MenuItemSample { [UnityEditor.MenuItem( "GameObject/UI/Text(Customized)" )] public static void CreateCustomizedText() { GameObject newObject = new GameObject( "Text", typeof( Text ) ); newObject.transform.localPosition = Vector3.zero; newObject.transform.localScale = Vector3.one; string[] fonts = AssetDatabase.FindAssets( "t:Font", new string[] { "Assets/Fonts" } ); if (fonts != null && fonts.Length > 0 ) { var text = newObject.GetComponent<Text>(); Font font = AssetDatabase.LoadAssetAtPath<Font>( AssetDatabase.GUIDToAssetPath( fonts[0] ) ); text.font = font; } if ( Selection.activeGameObject ) { var parent = Selection.activeGameObject; newObject.transform.SetParent( parent.transform, false ); newObject.tag = parent.tag; newObject.layer = parent.layer; newObject.isStatic = parent.isStatic; } } }
uGUIのTextを追加する例です。
コメント
[…] UnityのWebGLで日本語を表示する 2016.08.29 フォントに含まれない文字を使うときの動作 2014.12.30 Unityのシステムフォントの注意点 2016.02.22 […]