OSにインストールされたフォント

このページはVersion 2017.30f3 Personalを対象としています。

更新履歴

参考URL

概要

このページでは下の画像のように、 uGUIのDropDownコンポーネントでOSにインストールされたフォントをユーザーが選択できるようにし、 そのフォントをシーン内の全てのTextコンポーネントに反映する方法をまとめます。

ゲームオブジェクトの配置

まず、HierarchyビューからCanvas、Text、Dropdownを次のように配置します。 位置やサイズを適当に設定します。

スクリプトのアタッチ

次に、ProjectビューでC# Scriptを作成し、「UIController」とリネームして、開きます。 下のコードを入力し保存してから、Canvasにアタッチします。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class UIController : MonoBehaviour {

    string defaultFontName = "Arial";
    Dropdown dropdown;

    void Start()
    {
        dropdown = transform.Find("Dropdown").GetComponent<Dropdown>();
        dropdown.onValueChanged.AddListener(onValueChangedDropdonwFont);
        initDropdownFont();
        //デフォルトのフォント名を検索して選択する。
        int value = 0;
        for (int i = 0; i < dropdown.options.Count; i++)
        {
            if (dropdown.options[i].text == defaultFontName)
            {
                value = i;
                break;
            }
        }
        dropdown.value = value;
    }

    void Update()
    {

    }

    void initDropdownFont()
    {
        //フォント名の配列を取得する
        string[] fontnames = Font.GetOSInstalledFontNames();
        //ドロップダウンにフォント名のリストをオプションとして追加する。
        List<string> fontnameList = new List<string>();
        fontnameList.AddRange(fontnames);
        dropdown.ClearOptions();
        dropdown.AddOptions(fontnameList);
    }

    void onValueChangedDropdonwFont(int value)
    {
        //ドロップダウンで選択されているフォントに全てのフォントを設定する。
        string fontName = dropdown.options[value].text;
        setAllTextFont(fontName);
    }

    void setAllTextFont(string fontname)
    {
        //全てのテキストコンポーネントを取得する。
        Text[] textComponents = Component.FindObjectsOfType<Text>();
        //フォントサイズの最大値を取得する。
        int fontSizeMax = 0;
        foreach (Text component in textComponents)
        {
            if (fontSizeMax < component.fontSize)
                fontSizeMax = component.fontSize;
        }
        //フォントの一時データを宣言する。
        Font[] fonts = new Font[fontSizeMax + 1];
        //テキストコンポーネントに新しいフォントを設定する。
        foreach (Text component in textComponents)
        {
            int oldFontSize = component.fontSize;
            if (fonts[oldFontSize] == null)
                fonts[oldFontSize] = 
                    Font.CreateDynamicFontFromOSFont(fontname, oldFontSize);
            component.font = fonts[oldFontSize];
        }
    }
}

戻る

inserted by FC2 system