ArialフォントのTextコンポーネントを洗い出すエディタ拡張【Unity】

f:id:coffee_ryo:20180830201509p:plain

概要

WebGLで、デフォルトフォントのArialを使うと日本語が出ない問題がある

qiita.com

Arialを使っているTextコンポーネントの洗い出しがめんどくさい
特に開発終盤になりオブジェクトが増えてきた時。

洗い出しをするエディタ拡張を作る。

動作確認したUnityバージョン

version 2018.2.0f2

使い方

  1. 後述のソースコードを、「Assets/Editor」フォルダに入れる。「Editor」フォルダがない場合はフォルダを作成する。

  2. メニュー上部の「Tools/Arialフォント洗い出し」をクリック

f:id:coffee_ryo:20180830201646p:plain

ソース

FinderTextHavingArialFont.cs

using System.Linq;
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;

namespace CoffeeR{

    /// <summary>
    /// Arialフォントを洗い出すエディタ拡張クラス
    /// </summary>
    public class FinderTextHavingArialFont{

        [MenuItem("Tools/Arialフォント洗い出し")]
        static void Exec (){

            // シーン中にある、テキストコンポーネント全て取得
            var textComponents = UnityEngine.Resources.FindObjectsOfTypeAll( typeof( Text ) ) as Text[];

            // Arialな奴の取得
            var textsWithArial = textComponents
                            .Where(obj => obj.font.name == "Arial");

            // 該当しなければダイアログを出して終了
            if(textsWithArial.Count() == 0){
                FinderTextHavingArialFont.DrawDialog("問題なし","編集中シーンでフォントがArialのTextはありませんでした。");
                return;
            }

            // 該当するものがあれば、パスを記録していく。
            var explain = "編集中シーンでフォントがArialのTextが見つかりました。";
            foreach(var text in textsWithArial){
                explain += "\n" + GetHierarchyPath(text.gameObject.transform);
            }

            // 該当するオブジェクトのパスをダイアログに表示
            FinderTextHavingArialFont.DrawDialog("問題あり", explain);

            return;
        }

        static void DrawDialog(string title, string text){
            EditorUtility.DisplayDialog(
                    title,
                    text,
                    "OK"
            );
        }

        static string GetHierarchyPath(Transform self){
            string path = self.gameObject.name;
            Transform parent = self.parent;
            while (parent != null){
                path = parent.name + "/" + path;
                parent = parent.parent;
            }
            return path;
        }
    }
}

備考

tsubakit1.hateblo.jp

  • Unity1週間ゲームジャム向けに作りました。開発終盤なんかのチェックに使うのが良いかと思います。