前提
- unity 2018.4.19f1
- Addressables 1.7.5
- 前の記事「簡単リモートアセット(Unity Addressable Asset System)を試してみた (その1)」
やったこと
- エディタ拡張で、デフォルトグループ内のサブアセットをルートに展開します。
- 「Addressable Assets Systemを完全に理解する ~ Addressablesウィンドウから設定する」で紹介されていたスクリプトが最近のバージョンには整合しないようでした(
Addressables 1.7.5
で確認)ので、書き直しました。 - なお、アセットがルートになくてもアクセスはできるので、ルートに展開する必然性はありません。
- また、このスクリプトは、デフォルトグループだけを対象にしています。
Assets/~/Editor/MoveToRoot.cs
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.AddressableAssets;
using UnityEngine;
public static class AddressableAssetsUtil {
// サブエントリをルートへ展開して空になったフォルダを削除
[UnityEditor.MenuItem ("Assets/Addressables/MoveSubEntryToRoot")]
public static void MoveSubEntryToRoot () {
var entriesCount = 0;
var assetsCount = 0;
var settings = AddressableAssetSettingsDefaultObject.Settings;
var entries = new List<UnityEditor.AddressableAssets.Settings.AddressableAssetEntry> (settings.DefaultGroup.entries);
var assets = new List<UnityEditor.AddressableAssets.Settings.AddressableAssetEntry> { };
foreach (var entry in entries) {
entry.GatherAllAssets (assets, false, true, true);
if (assets.Count > 0 && entry.MainAsset.GetType () == typeof (UnityEditor.DefaultAsset)) {
entriesCount++;
Debug.Log ($"MoveSubEntryToRoot: entry {entriesCount}: {entry.address}");
foreach (var asset in assets) {
assetsCount++;
Debug.Log ($"MoveSubEntryToRoot: asset {assetsCount}: {asset.address}");
settings.MoveEntry (asset, entry.parentGroup);
if (asset.address.StartsWith ("Assets/")) {
asset.address = asset.address.Remove (0, 7);
}
}
assets.Clear ();
settings.RemoveAssetEntry (entry.guid);
}
}
AssetDatabase.Refresh (); // アセットを更新
Debug.Log ($"MoveSubEntryToRoot: done (entries: {entriesCount}, assets: {assetsCount})");
}
}
公式ドキュメント
-
Class AddressableAssetSettings
- MoveEntry(AddressableAssetEntry, AddressableAssetGroup, Boolean, Boolean)
- RemoveAssetEntry(String, Boolean)
-
Class AddressableAssetGroup
- GatherAllAssets(List, Boolean, Boolean, Boolean, Func)
-
Class AddressableAssetSettingsDefaultObject
- GetAllAssets(List, Boolean, Func, Func)
- Class AddressableAssetEntry