エディタ拡張におけるSubAssetの取り扱い方のまとめです。
Unity2018.2
SubAsset?
あるAssetの子として別のAssetを内包し一つのファイルとして取り扱う機能です。
SubAssetにする
SubAssetにするにはAssetDatabase.AddObjectToAsset()を使います。
ただしすでにAsset化されているものはSubAssetにはできません。
// assetのサブアセットとしてsomeObjectを追加する // someObjectがすでにアセット化されていたらエラー AssetDatabase.AddObjectToAsset(someObject, asset); // 追加した後にはアセットを再読み込みする AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(asset));
SubAssetから削除する
SubAssetを削除するにはDestroyImmediate()を使います。
第二引数をtrueにする必要があります。
// 第二引数はtrueに DestroyImmediate(asset, true);
SubAssetを取得する
SubAssetを取得するにはAssetDatabase.LoadAllAssetsAtPath()にメインアセットのパスを渡します。
ただしこのメソッドはメインアセットも含めたすべてのアセットを取得するので、
SubAssetだけ取得したい場合には注意が必要です。
var assets = AssetDatabase .LoadAllAssetsAtPath(path) .Where(x => AssetDatabase.IsSubAsset(x));
MainAssetかSubAssetか判定する
AssetDatabaseに判定するメソッドが用意されています。
AssetDatabase.IsMainAsset(asset) AssetDatabase.IsSubAsset(asset)
すべてのSubAssetを削除する
こんな感じにします。
foreach (var asset in AssetDatabase.LoadAllAssetsAtPath(AssetDatabase.GetAssetPath(this))) { if (AssetDatabase.IsSubAsset(asset)) { DestroyImmediate(asset, true); } } AssetDatabase.Refresh(); AssetDatabase.SaveAssets();