Odinを使用してInspector上にScriptableObjectファイルを開くボタンを付ける

プロジェクト毎に異なる設定ファイルや定数、設定をScriptableObjectとして保存することがあると思います


自分がこの時よくあるのが 「設定ファイルどこにあったっけ..」 問題
簡単にできる方法として Windowにショートカット作ってもいいと思いますが、Odinアセットを購入していたのもあり、折角なのでInspector上に選択ファイル上まで飛ぶようなボタンを作成することにしました。


using Sirenix.OdinInspector;
...

#if UNITY_EDITOR
        [Button("設定ファイル選択")]
        private void OnClickOpenSettings()
        {
            // ScriptableObjectを引っ張ってくる  
            var settings = LoadAsset<Settings>();

            EditorGUIUtility.PingObject(settings);
        }
#endif     

Load自体は好きな書き方ができますが、使いやすさとしてはScriptableObjectのクラスを指定するだけでAssetを検索して返す便利メソッドを通してやれば良さそうです

public static T LoadAsset<T>() where T : UnityEngine.Object
{
    var guid = AssetDatabase.FindAssets("t:" + typeof(T).Name).FirstOrDefault();
    if (string.IsNullOrEmpty(guid))
    {
        throw new System.IO.FileNotFoundException($"アセットが見つかりません {typeof(T).Name}");
    }

    var filePath = AssetDatabase.GUIDToAssetPath(guid);
    if (string.IsNullOrEmpty(filePath))
    {
        throw new System.IO.FileNotFoundException($"アセットパスが見つからない {guid}");
    }

    return AssetDatabase.LoadAssetAtPath<T>(filePath);
}

これだけで特定のスクリプトのInspectorにボタンが作成され、押すと自動で設定ファイルを検索して選択状態にしてくれます。

f:id:toshizabeth:20210414104257g:plain

ちょっとわかりにくいですが インスペクタにボタンが表示され、押すとアクションされていることがわかります


Odinを使用することで自分でEditor拡張せずともInspectorへ多様なアクションを仕込むことができるのでおすすめです