寻址资源设置
- 把Resources文件夹中的资源设置为Addressable,文件会自动迁移到Resources_moved,防止Resources重复打包
指定加载资源(不常用,通常是动态加载)
- // 自带类型
[AssetReferenceUILabelRestriction(“MyLabel”)] // 标签约束
public AssetReference assetReference;
public AssetReferenceAtlasedSprite asReference;
public AssetReferenceGameObject gameobjcetReference;
public AssetReferenceSprite spriteReference;
public AssetReferenceTexture textureReference;
// 泛型
public AssetReferenceT<AudioClip> audioReference;
public AssetReferenceT<RuntimeAnimatorController> controller;
public AssetReferenceT<TextAsset> textReference;+
assetReference.LoadAssetAsync<GameObject>().Completed += (handle) =>
{
//使用传入的参数(建议)
//判断是否加载成功
if (handle.Status == AsyncOperationStatus.Succeeded)
{
GameObject cube = Instantiate(handle.Result);
//一定资源加载过后 使用完后 再去释放
//实例化资源释放过后无影响,因为实例化物体只是遵循资源的配置信息去实例化物体,无引用关系
assetReference.ReleaseAsset();
materialRed.LoadAssetAsync().Completed += (obj) =>
{
cube.GetComponent<MeshRenderer>().material = obj.Result;
//释放过后材质会丢失,因为材质引用的是materialRed中的资源
materialRed.ReleaseAsset();
};
}
};
// 直接实例化GameObject
gameobjcetReference.InstantiateAsync();
动态加载
- 加载单个对象// 传入的参数可以是资源名,标签名,资源路径
// 第一种:传入第二参数为回调函数
Addressables.LoadAssetAsync<GameObject>(“Cube”, (obj) =>{
Instantiate(obj)
});
// 第二种:用异步AsyncOperationHandle
AsyncOperationHandle<GameObject> handle = Addressables.LoadAssetAsync<GameObject>(“Cube”);
handle.Completed += (handle) =>
{
//判断加载成功
if (handle.Status == AsyncOperationStatus.Succeeded)
Instantiate(handle.Result); // handle.result为加载出的内容
//一定要是 加载完成后 使用完毕后 再去释放
//不管任何资源 只要释放后 都会影响之前在使用该资源的对象
Addressables.Release(handle);
}; - 加载多个对象// 用IList作为泛型
Addressables.LoadAssetAsync<IList<GameObject>>(“Cube”)

评论(0)
暂无评论