Addressables 本地热更新基本流程

本文详细介绍了Unity中的Addressables系统,包括其自动寻址、配置、本地热更流程以及加载资源API的使用。通过Addressables,开发者能更好地管理游戏资源并实现热更新。
摘要由CSDN通过智能技术生成

一、什么是Addressables 

简单来说 Addressables是取代AssetBundle管理资源的系统。它具备自动分配地址功能,在使用时自动寻址加载,自动对本地移动资源进行跟踪并处理资源之间的依赖关系。

二、Addressables的基本配置

1、导入Addressables资源包

2、创建Addressables 的资产包管理

点击 Windows > Asset ManageMent > Addressables > Groups

然后点击创建Addressables Settings

3、资源集合Group的基本操作
  • 右键Groups窗口创建一个新的Group,选中新创建出来的Group,按F2修改其名称
  • 在创建一个新的Group时,AssetGroups会对应生成YAML格式的文件,用来记录资源内容和引导
  • 选中一个Group,右侧的Inspector窗口会显示一些基本信息(构建路径、加载路径等等)

4、配置P配置Profile设置
  • 在打开的Groups窗口中 点击 Profile > Manage Profiles
  • 修改Local的Type为Custom,将下面的Local.BuildPath和Local.LoadPath改成自己想要的文件目录 
  • Local...Path为本地相关路径。 Remote...Path为远程资源包路径设置相关
  • 当我们手动修改Profile的设置时,对应Group的YAML的文件中的路径也会跟着变化

5、添加Addressables Labels

点击Groups窗口的Tools > Window > Labels

点击+号创建Labels

Addressables Labels用途
  • 可以使用一个或多个标签作为标识需要再运行时加载的资产
  • 可以根据其分配的标签将资产打包到一个组中
  • 可以在Groups窗口中用标签来筛选资产

三、本地热更流程

1、创建一个Cube预制体,将Cube预制体手动拖动到Group中

2、点击Group下的资源,按F2修改其名字,并手动修改Labels

3、创建一个热更脚本,命名为HotUpdateTest
  • 脚本中的“Test”就是我们前面修改的资源包名称
  • 将脚本挂载在场景的空节点下
using UnityEngine;
using UnityEngine.AddressableAssets;

public class HotUpdateTest : MonoBehaviour
{
    void Update()
    {

        if (Input.GetKeyDown(KeyCode.C))
        {
            //异步加载 实例化 名为 Test 的预制件 并设置 其位置、旋转等 参数
            Addressables.InstantiateAsync("Test", new Vector3(0, 1.4f, 0), Quaternion.identity);
        }

        if (Input.GetKeyDown(KeyCode.Escape))
        {
            //退出程序
            Application.Quit();
        }
    }
}

4、打开Groups窗口,进行第一次资源包Build

  • 本地资源会在包体内,而远程资源是不会打进包体的,需要放到指定位置去加载。

5、然后我们打个游戏包,运行游戏按C会出现一个正方体

6、实现本地资源热更新

  1. 修改Groups下的资源,新建一个Cylinder圆柱体,拖入Group中,修改名称为Test,将原来的资源删除
  2. 点击Bulid > Update a Previous Build  选中Windows下的Bin文件
  3. 等待处理完毕
  4. 我们重新运行刚刚打出的游戏包
  5. 这个时候我们按C创建出来的是刚刚添加的圆柱体了

四、加载资源API

参数我用伪代码带过

        //使用Addressables.LoadAssetAsync加载单个资源:
        Addressables.LoadAssetAsync<GameObject>("Test").Completed += handle =>
        {
            GameObject obj = handle.Result;
            Instantiate(obj);
        };

        //使用Addressables.LoadAssetsAsync加载多个资源:
        Addressables.LoadAssetsAsync<GameObject>(new List<GameObject>...).Completed += handle =>
        {
            foreach (var obj in handle.Result)
            {
                Instantiate(obj);
            }
        };

        //使用Addressables.InstantiateAsync直接实例化资源:
        Addressables.InstantiateAsync("Test").Completed += handle =>
        {
            GameObject obj = handle.Result;
            // 实例化后的处理
        };

        //使用Addressables.Release来释放资源:
        Addressables.Release(GameObject);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值