运行环境
Unity 2020.3.3f1
Addressable 1.16.16
资源引用
AssetReference
资产引用
参考
属性
Asset
加载的资产
AssetReferenceT
泛型资产引用
参考
AssetLabelReference
资产标签引用
用来加载一组带有该标签的资产
参考
AsyncOperationHandle
异步加载返回的类型
属性
Result
异步加载的结果,加载失败时为null
Status : AsyncOperationStatus
- None(进行中)
- Succeeded(成功)
- Failed(失败)
IsDone : bool
Status成功或失败时为 true
PercentComplete : float
完成的百分比(0~1)
Addressables API
InstantiateAsync(异步实例化)
using UnityEngine;
using UnityEngine.AddressableAssets;
public class BasicReference : MonoBehaviour
{
public AssetReference baseCube;
public void SpawnThing()
{
// 使用 Addressable Name 实例化(区分大小写)
Addressables.InstantiateAsync("Assets/Prefabs/Cube.prefab");
// 使用 AssetReference 实例化
Addressables.InstantiateAsync(baseCube);
// 使用 RuntimeKey 实例化
Addressables.InstantiateAsync(baseCube.RuntimeKey);
// 使用 AssetReference实例方法 实例化
baseCube.InstantiateAsync();
}
}
注意点
- Addressable Name 区分大小写
ReleaseInstance(释放实例)
using UnityEngine;
using UnityEngine.AddressableAssets;
public class SelfDestruct : MonoBehaviour
{
public float lifetime = 2f;
private void Start()
{
Invoke(nameof(Release), lifetime);
}
private void Release()
{
// 释放实例
if (!Addressables.ReleaseInstance(gameObject))
{
Destroy(gameObject);
}
}
}
注意点
- 用 Addressables 实例化的对象,使用 Addressables.ReleaseInstance 释放实例
- 用 Instantiate 实例化的对象,使用 Destroy 销毁对象
LoadAssetAsync(异步加载资产)
轮询
using System;
using UnityEngine;
using UnityEngine.AddressableAssets;
public class FilteredReferences : MonoBehaviour
{
[Serializable]
public class AssetReferenceMaterial : AssetReferenceT<Material>
{
public AssetReferenceMaterial(string guid) : base(guid)
{
}
}
public AssetReferenceGameObject leftObject;
public AssetReferenceGameObject rightObject;
public AssetReferenceMaterial spawnMaterial;
public AssetReferenceMaterial midMaterial;
public AssetReferenceMaterial lateMaterial;
public Vector3 leftPosition;
public Vector3 rightPosition;
private MeshRenderer m_LeftMeshRender;
private MeshRenderer m_RightMeshRender;
private int m_FrameCounter = 0;
private void Start()
{
leftObject.LoadAssetAsync()