Unity热更新笔记(二)Addressable基础使用

4 篇文章 2 订阅
2 篇文章 2 订阅

系列文章目录

(一)ILRuntime基础使用



简介

addressable 是 unity 官方制作的 AssetBundle 框架,底层还是 ab 包,只是把资源打包、资源分类、资源加载,资源回收等等封装起来了。


一、Unity 中的准备工作

  • 在 Package Manager 中搜索添加 Addressables 包
  • 顶部菜单 Window -> Asset Management -> Addressables -> Groups 打开 group 窗口。然后在 group 窗口中点击 CreateAddressablesSettings 按钮创建 Addressables 的配置文件
  • 需要使用 Addressables 的资源,选中之后在 Inspector 窗口顶端,勾选 Addressable 并在旁边的 label 中填写该资源在 Addressables 中的名称,也就是加载时使用的路径 (默认刚勾选 addressable 时,该处会显示完整路径)

二、各个界面描述

1.Group

在这里插入图片描述

  • (1)创建新的 group 分组,也可以在下方右键 create new group
  • (2)Profile 打包路径,加载路径,这个后面专门讲 Profile 界面再细说
  • (3)Play Mode 的3种选择
    UseAssetDatabase(fastest) 直接加载文件而不打包,快速但Profiler获取的信息较少
    SimulateGroups(advanced) 在不打包的情况下模拟靠近AssetBundle的操作
    UseExisingBuild(requires built groups) 实际上是从AssetBundle打包和加载
  • (4)打包按钮,常规使用 Build -> New Build -> Default Build 就可以了。除非特殊设置,不如每次项目打包,addressables 都要重新 build 一次
  • (5)资源名称,加载时使用的路径
  • (6)辅助操作资源的工具,常用的是 Simplify Addressable Names ,把默认的完整路径缩短到只有文件本身的名称
  • (7)文件实际路径,在 group 窗口中选择文件,也会在 Project 窗口中自动选中
  • (8)资源的 label ,标签分类,批量加载同类资源时会用到

2.Group Setting

在 Group 窗口中选择某个 group ,或者在下面截图中显示的路径,可以打开 group setting,每个 group 对应一个
在这里插入图片描述

  • (1)配置文件路径
  • (2)该 group 中的资源的打包路径,跟加载路径,具体的再后面 Profile 界面细说
  • (3)资源压缩的种类
  • (4)这个 group 能否改变,后面增量更新再细说
    Can Not Change Post Release 您永远不会期望更新的静态内容。后续更新资源的话增量更新(不改变旧资源包,使用新资源包加载改变的内容)
    Can Change Post Release 您希望更新的动态内容。后续更新资源的话全量更新(直接替换旧资源)
    -(5)点击顶部的 Inspext Top Level Setting 可以跳转到总设置

3.AddressableAssetSettings 总设置

在这里插入图片描述
catalog 就是 addressable 的资源管理清单

  • (1)路径
  • (2)Profile 选择,点击 Manage Profiles 可以跳转到 Profile 窗口
  • (3)如果你想要手动的控制 catalog 的更新,就勾选该选项
    Addressables.LoadContentCatalogAsync
  • (4)如果需要热更新,那一定要勾选 Build Remote Catalog
  • (5)默认路径,以 group setting 优先

4.Profile 窗口

在这里插入图片描述
profile 负责管理资源的打包、加载路径,开发环境,测试环境,正式环境使用不同的模板,实际使用时可以一键切换

  • (1)创建模板
  • (2)打包平台的名称
  • (3)本地路径
  • (4)远端路径
    RemoteBuildPath 打包出来还是在本地,需要自己提交到服务器
    RemoteLoadPath 就是服务器的地址了
  • (5)实际使用的地址,可以对着路径看看打包出来都是啥内容

5.Hosting

在这里插入图片描述
addressable 提供给本地测试远程加载的服务器
[PrivateIpAddress]:指Unity提供的本地测试服务器IP
[HostingServicePort]:指本地测试服务器端口
[BuildTarget]:当前平台,android或者PC
在group设置信息会显示实际使用的地址


三、使用

1.使用 AssetReference 加载资源

在 inspector 界面开放 AssetReference 类型的变量,与其他的拖拽类似,只是内容是下载的

2.使用 LoadAssetAsync 加载资源

// API
public static AsyncOperationHandle<TObject> LoadAssetAsync<TObject>(IResourceLocation location);
public static AsyncOperationHandle<TObject> LoadAssetAsync<TObject>(object key);

这个key,就是前面添加 Addressables 资源的时候,设置的名称,

3.使用 LoadAssetsAsync 一次加载多个资源

public static AsyncOperationHandle<IList<TObject>> LoadAssetsAsync<TObject>(IEnumerable keys, Action<TObject> callback, MergeMode mode);
public static AsyncOperationHandle<IList<TObject>> LoadAssetsAsync<TObject>(IList<IResourceLocation> locations, Action<TObject> callback);

MergeMode枚举的含义
UseFirst,只返回匹配到的第一个数据
Union,返回包含任何一个key的数据(并集)
Intersection,返回全包含的数据(交集)

4.使用 LoadResourceLocationsAsync 加载资源路径信息

public static AsyncOperationHandle<IList<IResourceLocation>> LoadResourceLocationsAsync(IEnumerable keys, MergeMode mode, Type type = null);
public static AsyncOperationHandle<IList<IResourceLocation>> LoadResourceLocationsAsync(object key, Type type = null);

IResourceLocation 就是 addressable 中资源的路径信息,上面的 LoadAssetAsync 接口也有使用 IResourceLocation 做参数的重载
因为相对于资源本身,IResourceLocation 作为路径信息很小,所以遇到需要一次加载大量资源的时候,可以考虑先加载 IResourceLocation 再用 IResourceLocation 分别加载资源

5.加载场景

public static AsyncOperationHandle<SceneInstance> LoadSceneAsync(object key, LoadSceneMode loadMode = LoadSceneMode.Single, bool activateOnLoad = true, int priority = 100);
public static AsyncOperationHandle<SceneInstance> LoadSceneAsync(IResourceLocation location, LoadSceneMode loadMode = LoadSceneMode.Single, bool activateOnLoad = true, int priority = 100);

6.预加载资源

    public static IEnumerator IELoadDependencie(string key, System.Action<string, long> onStartLoad)
    {
        //计算需要下载资源的大小,单位b
        var downLoadSize = Addressables.GetDownloadSizeAsync(key);
        yield return downLoadSize;
        Debug.Log($"key:{key} num:{downLoadSize.Result}");

        onStartLoad?.Invoke(key, downLoadSize.Result);
        
        if (downLoadSize.Result > 0)
        {
            //下载资源
            yield return Addressables.DownloadDependenciesAsync(key, true);
        }
        Addressables.Release(downLoadSize);
    }

downLoadSize.Result 的单位应该是 b ,这个还没仔细确认

7.加载的异步等待

同步接口已经全部 [Obsolete] 了,能用的都是后面带 Async 的接口
加载接口返回 AsyncOperationHandle 对象
在这里插入图片描述

  • 协程 IEnumerator
    参考上方的预加载代码,直接 yield return 就可以了
  • 异步 await
    var target = await AsyncOperationHandle.Task;
  • 回调
    开启加载后在 Completed 中注册事件
    如果该对象已经下载了,再次下载会不会同步直接完成,不走异步逻辑,不太确定
  • updata 检查
    检查 IsDone

四、增量更新

1.需要勾选setting的BuildRemoteCatlog
2.资源类型是Can Not Change Post Release
3.Groups窗口Tools->Check for Content Update Restrictions
4.在打开窗口选中对应打包平台的文件夹下的.bin文件
5.之后会出现一个显示改动的窗口,选择右下角的Apply Changes
6.改动过的文件会自动的放入名为Content Update的组
7.然后使用Groups窗口Build->Update a Previous Build做增量更新
8.不更新包体时,必须用Update a Previous Build打包,每个包会对应自己的catalog

以前做写的放在文档里的截图都丢了,偷懒没重新截图


五、Cloud Content Delivery 使用(coming soon)

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值