この記事でのバージョン
Unity 2018.4.8f1
Addressables 1.2.4
はじめに
Addressable Assets System(AAS)はアセットのロード時にアドレス(文字列)を用います。
一応、AssetReference等を使って、文字列を使わない使用しない方法もありますが、
場合によってはアドレスで指定したい場合もあります。
そんな時に、アドレスを直接入力してしまうと打ち間違いが発生してしまうかもしれませんし、
アドレスの変更への対応もしにくいです。
という事で今回は、アドレスを(とついでにラベルも)管理する定数クラスを自動作成してみました。
イメージとしては以下のようなアドレスの定数が列挙された定数クラスを自動で作成&更新し、
手入力をなくすと言った感じ。
//定数クラスを使って、Keyを指定してロード
Addressables.LoadAssetAsync<GameObject>(AddressableAssetAddress.CAMERA).Completed += op => {
Debug.Log(op.Result.name);
};
ちなみに、以前Resourcesでも同じようなものを作っていました。
AddressableAssetAddressClassCreator
さっそくAddressable Assetsのアドレスとラベルを管理する定数クラスを自動生成するクラス
AddressableAssetAddressClassCreatorのコードです。
ちなみに以前紹介したConstantsClassCreatorも使っています。
ただし、以前のはコードが微妙に違うので、↑のやつを使ってください。
この2つをEditorに作成した後、
AddressableAssetAddressClassCreator.csの上部にあるEXPORT_DIRECTORY_PATH
で定数クラスを生成するディレクトリへのパスを指定します。
//定数クラスを生成するディレクトリのパス private static readonly string EXPORT_DIRECTORY_PATH = "Assets/Scripts";
なお、AddressableAssetsDataディレクトリの位置を変更した場合は
TARGET_DIRECTORY_PATHも合わせて修正する必要があります。
//変更をチェックするディレクトリのパス private static readonly string TARGET_DIRECTORY_PATH = "Assets/AddressableAssetsData/AssetGroups";
これでAddressable Assetを更新した時に
アドレスの定数クラスであるAddressableAssetAddressと、
ラベルの定数クラスであるAddressableAssetLabelが自動作成&更新されるようになります。
ただし、ラベルは実際に設定されているものだけが定数になります。
また、Tools/CreateAddressableAsset Constants Classから手動で更新する事も可能です。
使い方はロード時にこれら2つの定数クラスを使うだけ。
直接入力がなくなりますし、アドレス変更時にエラーが出るようにもなります。
//定数クラスを使って、Keyを指定してロード
Addressables.LoadAssetAsync<GameObject>(AddressableAssetAddress.CAMERA).Completed += op => {
Debug.Log(op.Result.name);
};
おわりに
直接入力は地味に面倒ですし、結構気付きにくいバグの原因にもなるので出来る限り避けて、
今回のように定数クラス、それも出来れば自動生成するようにすると良いと思います。
あとは自動でAddressable Assets化出来ればかなり運用が楽になるのですが、それはまた別のお話(記事)。