前提
- 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
usingSystem.Collections.Generic;usingUnityEditor;usingUnityEditor.AddressableAssets;usingUnityEngine;publicstaticclassAddressableAssetsUtil{// サブエントリをルートへ展開して空になったフォルダを削除[UnityEditor.MenuItem("Assets/Addressables/MoveSubEntryToRoot")]publicstaticvoidMoveSubEntryToRoot(){varentriesCount=0;varassetsCount=0;varsettings=AddressableAssetSettingsDefaultObject.Settings;varentries=newList<UnityEditor.AddressableAssets.Settings.AddressableAssetEntry>(settings.DefaultGroup.entries);varassets=newList<UnityEditor.AddressableAssets.Settings.AddressableAssetEntry>{};foreach(varentryinentries){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(varassetinassets){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