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 を上手いことすれば対応できると思います)。


