ゴマちゃんフロンティア

アザラシが大好きなエンジニアの開発日記です

【Unity】エディタ拡張で(疑似的に)Projectビューの特定のフォルダを開くようにしたお話

time 2021/04/19

今回はUnityのエディタ拡張なお話です。
エディタ上であれこれ編集していると、Projectビューで「あのフォルダ開きたいー!」なケース、結構ありますよね。
ずっとそれを何とかしたかったので、エディタ拡張で疑似的に開けるようにしてみました。

疑似的ってどういうこと?

こちらのQiitaの記事に詳しくありますが、「特定のフォルダを表示する」が現状だと難しいというか、Reflectionで強引にやらないとできないそうです。
https://qiita.com/Rijicho_nl/items/e6b693d7b45339de358e

ただReflectionはあまり使いたくない…かといってダミーファイルを置くとかもやりたくない…。
ということで作ったコマンドがこちら。任意のEditorフォルダ内に配置して使用します。

using UnityEditor;
using UnityEngine;

public class AssetPingSceneCommand
{
    private const string ASSET_PATH = "Assets/Scenes/temp.mat";

    [MenuItem("Tools/Asset Ping Scene %#&S")]
    public static void AssetPingScene()
    {
        // 適当なアセットを作ってping対象にする
        var material = new Material(Shader.Find("Specular"));
        AssetDatabase.CreateAsset(material, ASSET_PATH);

        var asset = AssetDatabase.LoadAssetAtPath<Object>(ASSET_PATH);
        EditorGUIUtility.PingObject(asset);

        // 仮のアセットを消す
        AssetDatabase.DeleteAsset(ASSET_PATH);
        AssetDatabase.Refresh();
    }
}

「適当なアセットを仮で作る→そのアセットにping打つ→アセットを消す」という原始的な方法です。これなら結果的にフォルダが開けて、ダミーファイルも不要ではあります。
ショートカットキーとして「%#&S」を指定しており、Ctrl+Shift+Alt+Sでサッと開けます。ちょっと押しにくいですが修飾キー2だと他のショートカットと被るので仕方なく…。

ただ若干無駄が多いのと、一時的に仮のアセットが強調表示されてしまいます。なのであくまでも疑似的。

これがどうしようもなかったのですが、やっぱり特定のフォルダを開けるのはすごい便利なので、許容して使っています。
いずれかは公式でフォルダ開けるAPIとかできるといいなーと思いますね。

down

コメントする