Unityのシステムフォントの注意点

Unity4.5やらの時代で開発していたときの話なので、もしかしたら事情が変わってるかもしれません。

Unityではフォントを指定する際にArialを指定する事でシステムフォントを利用できます。

システムフォントは全ての端末に間違いなく存在しフォントが読み込めない…という事を防ぐことが出来ます。

この記事は書きかけ…というか実機での確認がとれていません。おそらく実機用意できないのでずっと確認できないです…

これでうまくいったとか、いかなかったなんかの情報があるとありがたいです。

 

この記事は以下の記事を参考にしています。というか以下の記事そのものです。

UnityのArialフォントがAndroid実機上で表示されない場合がある

iOS 8.2 以降で日本語フォントが正しく表示されない

Arialによるシステムフォントの問題点

このArialによるフォントの指定には問題点があります。

というのもこのシステムフォントで利用されるものが具体的にどういったフォントなのかが不明なのです。言い換えれば端末によってマチマチという事です。

スマートフォン向けで作っていたときに一部の端末で日本語が表示されないという不具合が発生しました。

それはこの「システムフォント」で読みこまれているフォントが日本語に対応していないものだったために発生していました。

対策

実際問題日本語に対応していない端末は、少なくとも日本で発売されているものには存在しません。システムフォントの中にも日本語対応しているものがあるはずです。

デフォルトで読みこまれるフォントが日本語非対応なだけ、なのでUnity側で日本語対応しているシステムフォントを読み込むように指定する事で対応できます。

設定方法

設定にはまず適当なフォント(拡張子.ttf)を用意します。

これは設定を利用するだけで、中身は使わないのでなんでもいいです。

fontsettings

追加できたらインスペクターで設定します。

fontsettingsimpl

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のところに独自のフォントを追加するといいです。

UnityのHierarchyのCreateに項目を追加する
ヒエラルキーのCreateボタンや、GameObjectを右クリックしたときに出る子供を作成する項目は実は自由に追加できます。 これらに好きな項目を追加します。 追加方法 追加にはEditorのMenuItemを利用しま...

 

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を追加する例です。

 

コメント

  1. […] UnityのWebGLで日本語を表示する 2016.08.29 フォントに含まれない文字を使うときの動作 2014.12.30 Unityのシステムフォントの注意点 2016.02.22 […]

タイトルとURLをコピーしました