アセットに設定されてあるアセットバンドル名をコンテキストメニューで取得できるようにしてみた
概要
プログラムでアセットバンドルからロードする際に、アセットに設定したAssetBundle名を取得したい時がありました。
Inspectorで設定できるのでそこから名前もコピーできるのかなと思っていましたが、 コピーみたいな項目がありませんでした。
なのでコンテキストメニューを利用して選択しているアセットのアセットバンドル名をコピーできるようにしました。
エディタ拡張のリハビリがてら登録されているAssetBundle名をコンテキストメニューで取得するスクリプトを書いた pic.twitter.com/b0FpgyQrXZ
— ダリア (@daria_nicht) July 25, 2019
環境はUnity2018.4.4.f1です。
実装
コードを見たほうが早いと思うのでコード載せます。
using System.Linq; using UnityEditor; using UnityEngine; public class SelectObjectAssetBundleNamesCopyToClipBoard { [MenuItem("Assets/SelectObjectAssetBundleNamesCopyToClipBoard")] private static void CopyToClipBoard() { //バンドル名はAssetImporterで取得できるので、選択しているアセットのパスを渡す var selectAssetsPath = Selection.objects.Select(AssetDatabase.GetAssetPath); var assetImporters = selectAssetsPath.Select(AssetImporter.GetAtPath); //スクリプトで使えるように引用符(')で囲んでおく //.NET 4.xだったらこの書き方で行けますが、それより下のバージョンなら+などで連結してください var assetBundleNames = assetImporters.Select(importer => $"\"{importer.assetBundleName}\""); //クリップボードにコピー GUIUtility.systemCopyBuffer = string.Join(",\n", assetBundleNames); } [MenuItem("Assets/SelectObjectAssetBundleNamesCopyToClipBoard", true)] private static bool IsValidate() { //選択しているオブジェクトがあればコピーできるようにする return Selection.objects != null && Selection.objects.Length > 0; } }
最後に
今は選択しているアセットのみですが、フォルダだった場合はフォルダ以下のアセットバンドル名も取得できれば便利になりそうですね。 機会があったら改良したいと思います。