Unityで自前のパラメータをjosn形式で扱った際にObjectFieldのPickerで選ぶのが大変


初めに

プロジェクトでjsonデータを扱うことがあると思います。
その際にEditorGUILayout.ObjectFieldでPickerでデータを選択する際に
開発序盤ならば選択するものが少ないからいいですが

これが開発後半になると

多すぎて、どれ選べばいいんだよ!(名前ソートして。。。は言わないでねw)
って状態になります。なぜ、このようになるのか?
これを私なりに解決する方法を今回書いてみようかと思います。

なんでこんなにでてくるの?

EditorGUILayout.ObjectFieldのプログラムでTextAssetを設定しています。

        TextAsset source = new TextAsset();
        source = EditorGUILayout.ObjectField("hoge",source, typeof(TextAsset), true) as TextAsset;

このTextAssetのクラスの親子関係が問題になります。階層を見てみると

Object

┗TextAsset

 ┗MonoScript

となっています。
MonoScriptは、「スクリプトのAssetを扱うためのクラス」になります。このおかげでPickerを出すと
クラスの親子関係でMonoScriptが選択画面に出てしまいます。なので、開発後半になると大量に出てしまいます。
というわけです。

対処法

私がやった対処法はPickerで検索するする際にオブジェクトにラベルを付けておく
検索対象をタイプだったりいろいろ設定できます。

Unity:Projectウィンドウの検索を使いこなす!

ラベル検索をPickerを開いた時に自動で設定すればいいのでは?
って事で下記の方法使ってラベルを入れました。

プログラムはこんな感じ、

         TextAsset source = new TextAsset();
        source = EditorGUILayout.ObjectField("hoge",source, typeof(TextAsset), true) as TextAsset;

        if (ObjectSelectorWrapper.isVisible)
        {
            ObjectSelectorWrapper.SetFilterString("l:hoge");
        }

これで、json形式のデータを"hoge"と言うラベルをつけておくだけでPickerの選択ウィンドウがすっきりします。
左が対応後、右が対応前

最後に

今回は、アセットの管理方法について書きましたが、私が思いついて対処方なので、
もっと良い方法があったら教えてください。
開発後半になってアセットが大量にあり、管理が大変になります。。。
初めから設計をしっかりしてればよかったな~って思う今日この頃。。