kizumi_header_banner_img

Hello! Beautiful Kizumi!

加载中

文章导读

Unity进阶之Addressables


avatar
Yuyas 2025年12月19日 6

寻址资源设置

  • 把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)

查看评论列表

暂无评论


发表评论

表情 颜文字
插入代码

个人信息

avatar

24
文章
1
评论
1
用户

近期文章