Addressables学习笔记

运行环境

Unity 2020.3.3f1

Addressable 1.16.16

资源引用

AssetReference

资产引用

参考

AssetReference

属性

Asset

加载的资产

AssetReferenceT

泛型资产引用

参考

AssetReferenceT

AssetLabelReference

资产标签引用

用来加载一组带有该标签的资产

参考

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()
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值