Image や Sprite や Sound ファイルをプロジェクトに突っ込むだけで、自動的に Addressable Asset System(AAS) にも登録されるコードを紹介します。
ソースコード
using System.IO; using UnityEditor; using UnityEditor.AddressableAssets; using UnityEditor.AddressableAssets.Settings; public class PostProcessor : AssetPostprocessor { const string STREAMINGASSETS_RAWDATA = "StreamingAssets_RawData"; static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) { var settings = AddressableAssetSettingsDefaultObject.Settings; foreach (string asset in importedAssets) { if (asset.IndexOf(STREAMINGASSETS_RAWDATA) < 0) { continue; } string name = asset.Remove(0, asset.IndexOf(STREAMINGASSETS_RAWDATA) + STREAMINGASSETS_RAWDATA.Length + 1); if (name.IndexOf("/") >= 0) { string groupname = name.Substring(0, name.IndexOf("/")); string assetname = name.Remove(0, name.IndexOf("/")+1); var group = settings.FindGroup(groupname); if (group == null) { var groupTemplate = settings.GetGroupTemplateObject(0) as AddressableAssetGroupTemplate; // Group entry AddressableAssetGroup newGroup = settings.CreateGroup(groupname, false, false, true, null, groupTemplate.GetTypes()); groupTemplate.ApplyToAddressableAssetGroup(newGroup); AssetDatabase.SaveAssets(); group = settings.FindGroup(groupname); if (group == null) { Debug.LogError($"グループの作成に失敗. {groupname}"); continue; } } string label = Path.GetDirectoryName(assetname).Replace('\\', '/'); // Addressable entry var guid = AssetDatabase.AssetPathToGUID(asset); settings.CreateOrMoveEntry(guid, group); AssetDatabase.SaveAssets(); var entry = group.GetAssetEntry(guid); // Simplify addressable name entry.SetAddress(Path.GetFileNameWithoutExtension(assetname)); // Set Label if (string.IsNullOrEmpty(label) == false) { entry.SetLabel(label, true, true); } AssetDatabase.SaveAssets(); } } } }
使い方
Assets/ の下に StreamingAssets_RawData/ というフォルダを作り、その下にファイルを放り込むと自動的に Addressable Groups にも情報が登録されます。
StreamingAssets_RawData というフォルダ名が気に入らない場合は、コードの STREAMINGASSETS_RAWDATA の値を変更してください。
16~19行目で弾いてるだけなので、複数のフォルダに対応するのもそれほど難しくないと思います。
1つ目のフォルダが AAS のグループ名、2つ目以降のフォルダはラベル名になります。
例えば database/db/db2/Data_Memory.asset であれば、グループは database、ラベルは db/db2 となります。
(グループやラベルは、なければ自動的に作成されます)
このへんのルール付けはアプリによっても異なると思うので、好みに応じてコードを改変してください。
アドレス名も自動的に Simplify されますが、コードで Simplify (したような)文字列を登録してるだけなので、必要があれば変更してください。
ラベルは、ファイル移動には対応していません
一旦登録したファイルを移動しても Addressable Group のパスは追従しますが、サンプルコードだとラベルなどは追従しないので注意してください(movedAssets を上手いことすれば対応できると思います)。