🎃
Unity Addressable Assets(AAS)
AASの中身はAssetBundleでカタログファイルという巨大なJsonファイル
基本Fast Modeで実装を行い、実問題が起こった時だけPacked Play Mode
FastModeでは細かな解析が出来ない
Addressable Assetsのアドレスはファイル名とは別に自由に設定できますが、同じアドレスを設定する事が出来てしまいます。設定時、ロード時共にエラーも出ないので、気付かず重複していて、思ったのと違うのをロードしていたなんて事にもなりかねません。https://kan-kikuchi.hatenablog.com/entry/AddressDuplicateDetecter
Package Managerでインストール必要
Window -> Asset Management -> Addressables
Addressable Assets関連のファイルはAssets/AddressableAssetsDataにあるので、消してはいけない
単体ロード
using UnityEngine;
using UnityEngine.AddressableAssets;//Addressablesを使うのに必要
public class NewBehaviourScript : MonoBehaviour {
private void Start () {
//Alchemist_ManというAddressのSpriteを非同期でロード
Addressables.LoadAssetAsync<Sprite>("Alchemist_Man").Completed += op => {
//op.ResultがロードしたSprite
Debug.Log(op.Result.name);
};
}
}
複数同時ロード
using UnityEngine;
using UnityEngine.AddressableAssets;//Addressablesを使うのに必要
public class NewBehaviourScript : MonoBehaviour {
private void Start () {
//PrefabというLabelが付いたGameObjectを全て取得
Addressables.LoadAssetsAsync<GameObject>("Prefab", OnLoadPrefab);
}
//Prefabのロードが完了する度に(1つのPrefabづつ)呼ばれる
private void OnLoadPrefab(GameObject prefab) {
Debug.Log(prefab.name);
}
}
インスタンスの生成と破棄
using UnityEngine;
using UnityEngine.AddressableAssets;
public class NewBehaviourScript : MonoBehaviour {
private void Start() {
//PlayerというPrefabをロードし、インスタンスを作成
Addressables.InstantiateAsync("Player").Completed += op => {
Debug.Log(op.Result.name);
};
}
}
//Destroyで削除しちゃダメ!
//Destroy(_player);
//削除する時はReleaseInstance
Addressables.ReleaseInstance(_player);
文字列(AddressやLabel)の直接入力を避ける
using UnityEngine;
using UnityEngine.AddressableAssets;
public class NewBehaviourScript : MonoBehaviour {
//Inspectorで設定出来るように
[SerializeField]
private AssetReference _prefabReference = null;
private void Start () {
//Addressの文字列の代わりにAssetReferenceを使ってロード
Addressables.LoadAssetAsync<GameObject>(_prefabReference).Completed += op => {
Debug.Log(op.Result.name);
};
}
}
//Inspectorで設定出来るように
[SerializeField]
private AssetLabelReference _labelReference;
//PlayerというLabelが付いたアセットだけ設定出来るように
[AssetReferenceUILabelRestriction("Player")]
public AssetReference _prefabReference;
引用元
Discussion