Addressable(11)资源更新(热更AB包)、强更与热更概念

资源更新

此节概要:为实现AB包热更,Addressable提供两种AB包热更策略,此节就探讨这两种方式的优劣与具体实现

知识点一:资源更新指的是什么?

  • 对于游戏开发者

    当项目正式发布后,对于远程加载的资源,可以通过改变资源服务器上的AB包内容来达到更新游戏的目的。

  • 对于游戏玩家

    能加载得到游戏开发者更新的最新资源

  • 在打包好了的程序,什么代码负责去加载最新资源

    Addressables会自动帮助我们判断哪些资源更新了,并加载最新的内容

知识点二:内容更新限制参数回顾

  • 位置

    每个组的Inspector窗口的最后一个Content Update Restriction

    image-20231123224906538

  • 参数解析

    • Can Change Post Release

      1. 可以改变发行后内容

      2. 该模式不移动任何资源

      3. 如果此包中的任何资源发生了更改,则重新构建当前整个包

        (哪个包资源改变了则重新构建这个AB包,不是所有的AB包)

    • Cannot Change Post Release

      1. 无法改变发布后内容
      2. 如果当前包中任何资源已经改变,则[检查内容更新限制]工具会将其移动到为更新创建的新组中。
      3. 在进行更新构建时,从这个新组创建的AssetBundles中的资产覆盖现有包中的资产版本。

(知识点三与四前置操作)

  • Demo代码

            Addressables.LoadAssetsAsync<GameObject>(new List<string>() { "Cube", "SD" }, (obj) =>
            {
                Instantiate(obj, new Vector3(0,0,0), Quaternion.identity);
            }, Addressables.MergeMode.Intersection);
    

    把代码类拖到场景的GameObject上

  • 开启Addressables Hosting

    请添加图片描述

    请添加图片描述

知识点三:整个AB包更新 Can Change Post Release

相关解释

整包更新指,某一个分组里的资源发生变化后,我们需要将其当前整体分组进行打成一个AB包

  • 优点

    这种方式比较适用于大范围资源更新时使用

  • 坏处

    玩家需要下载一个包含很多的资源的AB包,内容较大,比较耗时耗流量

打《底包》步骤

  • GameObject分组设置

    image-20231124222032065

    上图:目标GameObject分组

    请添加图片描述

    上图:设置成加载此分组的资源从远程服务器加载

    image-20231124001542024

    上图:设置更新策略

  • 打AB包,运行Default Build Script

    image-20231124002259450

    image-20231124223514045

  • 构建应用程序

    image-20231124004014543

  • 运行

    image-20231124004018568

打《热更AB包》并加载步骤

  • 将GameObject分组中的Cube的胶囊,换成其它

    • 替换前

      image-20231124004249050

    • 替换后

      image-20231124224857543

      将原本加载Capsule.Prefab,替换成加载Sphere.prefab

  • 更新资源

    image-20231124004552769

    点击Update a Previous Build后,需要选择上一次打包的信息对比,才能决定哪些是新增的

    image-20231124004720288

    更新GameObject分组的AB包结果如下:

    image-20231124223626294

    • 当前是Unity的模拟服务器(Addressables Hosting)

      不用将新打的各个文件拷贝到某个服务器的位置,因为当前ServerData目录就是Exe程序要访问的服务器位置

    • 如果是真正的远程服务器

      需要将新打的各个文件拷贝到服务器的目录

  • 运行第一步:打《底包》构建好了的exe程序

    • 如果是Unity的模拟服务器

      • 加载成功情况:替换成加载出Sphere.prefab

      • 加载失败情况:不显示

        因为Unity Adressable hosting有坑,如果失败,请看下面替换解决方案

    • 失败的解决方案

      1. 记录Addressable hosting的Ip和端口后关闭

        172.24.16.1:58474

        image-20231124012431253

      2. 在本地用HFS(https://github.com/rejetto/hfs/releases/tag/v0.49.2)搭建一个本地服务器

        上传打的热更AB包,并将访问路径设置为172.24.16.1:58474

        • 设置端口

          image-20231124012854548

        • 设置ip

          image-20231124013039990

        • 上传两次打的AB包及相关文件

          请添加图片描述

        • 网页访问172.24.16.1:58474,测试是否有上传文件

          image-20231124224223600

          有,代表上传文件成功

      3. 重新运行应用程序,应能加载成功,加载成Sphere

        image-20231124224414451

知识点四:局部更新 Cannot Change Post Release

操作相关

在知识点3的基础上使用局部更新打**《热更AB包》**

  1. 修改GameObject分组设置

    image-20231124224701689

  2. 修改GameObject分组的资源

    • 修改前

      image-20231124224901520

    • 修改后

      image-20231124225439727

  3. 生成局部分组

    • 使用工具检查内容更新

      image-20231124225513948

      选择上次打包文件

      image-20231124225530690

    • 选择更新的内容,并应用

      请添加图片描述

    • 得到Content Update分组

      image-20231124225637970

  4. 得到热更AB包

    • 更新前

      请添加图片描述

    • 选择build-update a preivous build后

      image-20240217231229097

      选择上一次的生成文件

      image-20231124230435271

      选择后

      image-20231124230411405

  5. 在Addressables Hosting环境下可以直接运行之前打的exe底包

    image-20231124232142406

前辈讲解视频中更新AB包操作

  • 前辈所说

    1. 视频中更新AB包的操作只能适合小型项目,不适合大型项目。
    2. 最好不使用Addressable的提供此AB包局部内容更新的方式,需要自己写AB包内容更新策略
  • 只记得前辈说的缺点

    1. 会新增一个分组

      让项目分组混乱

      image-20231124233641918

    2. 还会搞出其它很多问题

  • 前辈所说的自己写AB包内容更新策略方法简略(记不太清了,后续修改)

    1. 不用局部更新,每次都给所有分组打完整的AB包

    2. 有一个版本号来判断玩家应用程序是否需要更新AB包

      用玩家手机上已有的AB包与服务器的所有AB包对比

    3. 当检测到本地已有的AB包,就不要下载

    4. 当检测到本地没有的AB包,就要下载

简单讲解强更与热更

  • 引入

    游戏发了一个整包1.0版本,开发者想更新游戏内容。

  • 强更

    版本号从1.2(1.x)版本升级到2.0版本

    • 什么情况需要强更(个人拙见,有其它情况未遇到或想到)

      • 当开发者更新的内容涉及主工程代码则必须强更

      • 更新的资源太大必须强更

        以免热更太大,导致玩家等太久或者版本管理混乱。

    • 玩家需要干什么

      玩家需要重新下载完整的安装包(600M)并重新安装游戏

  • 热更

    更新的游戏内容只有:资源、热更dll这些资源,这些资源需要重新打热更AB包并同步更新到玩家的手机上

    (而此节所讲的整包更新、局部更新则是应用在这:更新资源改动的AB包并同步给玩家的手机上)

    • 比如要更新的资源

      • 资源

        给游戏添加中秋节活动主题的内容

      • 热更dll

        游戏代码出现小问题,并且此代码处于热更工程。

    • 玩家需要干什么

      玩家手机的应用程序不用重新下载完整的安装包(600M需重新安装游戏),只需由游戏自动下载最新的AB包(10M左右且不用重新安装游戏)即可给玩家手机上实现资源更新和热更代码更新。

  • 12
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
AddressableUnity中的一个工具,用于管理资源的加载和卸载。iOS指的是在发布应用后,可以通过网络下载更新资源文件,实现应用更新的功能。 在Unity中使用Addressable可以实现iOS的功能。首先,我们需要将需要资源文件分割成小块,并上传到服务器上。然后,在应用中使用Addressable加载资源时,可以通过指定资源的地址来加载对应的资源文件。 当应用启动时,可以通过检查服务器上的资源版本号来判断是否需要进行。如果有更新资源文件,可以使用Addressable下载更新资源文件,替换原有的资源文件,以实现应用的更新。 使用Addressable进行iOS的好处是可以降低应用的安装大小,因为可以把一些较大的资源文件分离出来,通过网络进行下载。同时,也可以减少应用的更新时间,只需要下载更新资源文件而不是整个应用。 然而,使用Addressable进行也需要注意一些问题。首先,要保证服务器上的资源文件的稳定性和完整性,以免应用在更新资源时出现错误。其次,要考虑用户的流量消耗,尽量减少资源文件的大小和下载次数。 总之,通过使用Unity中的Addressable工具,我们可以实现iOS的功能,实现应用的自动更新。这样可以提升用户体验,减少安装大小和更新时间,但也需要注意资源文件的稳定性和用户的流量消耗。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘建杰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值