2020/11/09
今回は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とかできるといいなーと思いますね。