見出し画像

【Unity】Addressable Asset Systemのアセット登録の自動化

アセット数が多くなると手作業で登録するのは大変なので、Unityエディタ上で特定のフォルダにドラッグアンドドロップするとデフォルトのグループに自動で登録するスクリプトです。

環境

Unity 2019.4.5f1
Addressable Asset System v1.18.15

スクリプト

using System.IO;
using UnityEditor;
using UnityEditor.AddressableAssets;

public class AutoAddressing : AssetPostprocessor {
   
   private const string TARGET_DIRECTORY = "Assets/AssetData";

   private static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets,
       string[] movedFromAssetPaths) {

       // 追加のみ処理
       if (importedAssets.Length <= 0) return;

       var settings = AddressableAssetSettingsDefaultObject.Settings;
       
       foreach (var asset in importedAssets) {
           // 対象のフォルダ以外のファイルは除外
           if (!asset.Contains(TARGET_DIRECTORY)) continue;
           // フォルダは除外
           if (File.GetAttributes(asset).HasFlag(FileAttributes.Directory)) continue;
           
           var guid = AssetDatabase.AssetPathToGUID(asset);
           var group = settings.DefaultGroup;
           var assetEntry = settings.CreateOrMoveEntry(guid, group);
           
           // Simplify addressable name
           assetEntry.SetAddress(Path.GetFileNameWithoutExtension(asset));
           assetEntry.SetLabel("Hoge", true, true);
       }
       
       AssetDatabase.SaveAssets();
   }
}

「TARGET_DIRECTORY」で自動化の対象となるフォルダを指定しています。Assets内の状態が変化したときに実行されるOnPostprocessAllAssets内で処理しているので、任意のタイミングで実行したい場合はMenuItemを使うと良いかと思います。

正常に動作していれば指定したフォルダにD&Dすると自動でAddressable Assetとして登録されます。

スクリーンショット 2021-08-22 203803

Unityエディタ拡張のため、スクリプトはEditorフォルダに置くか他のフォルダに配置する場合はプリプロセッサで囲ってビルド時にエラーが出ないようにしてください。

おわりに

今回はAddressable Asset Systemをスクリプトから操作する方法を理解する目的も兼ねて作成しました。極力シンプルな作りになっているので、フォルダ構造を解析してグループ分けやラベル付けなど、必要に応じてカスタマイズしてみてください。🌱

参考


いいなと思ったら応援しよう!