13.资源打包加载

  1. 13.资源打包加载-打包加载
    1. 13.1 知识点
      1. 编辑器中资源加载的几种方式
      2. 本地资源发布
      3. 模拟远端发布资源
      4. 实际上的远端发布资源
      5. 总结

13.资源打包加载-打包加载


13.1 知识点

编辑器中资源加载的几种方式

  • Use Asset Database(最快的):
    • 使用资源数据库,直接本地加载资源,主要用于开发功能时
  • Simulate Groups(模拟AB包模式 高级):
    • 模拟组(后期)
    • 通过 ResourceManager 从资产数据库加载资产,就像通过 AB 包加载一样
    • 通过引入时间延迟,模拟远程 AB 包的下载速度和本地 AB 包加载速度
    • 在开发阶段可以使用这个模式来进行资源加载
  • Use Existing Build(AB包模式 需要已构建的组):
    • 正儿八经的加载 AB 包资源
    • 必须打 AB 包后使用
    • 会从 AB 包中加载资源

本地资源发布

  • 把一个Cube标签为SD作为可寻址资源,放到GameObject组下

  • 尝试加载一个对象,资源数据库直接加载和模拟AB包模式可以正常加载并实例化,AB包(Use Existing Build)模式下没打包会报错,现在改成AB包(Use Existing Build)模式下准备打包

Addressables.LoadAssetsAsync<GameObject>(new List<string>() { "Cube", "SD" }, (obj) => { Instantiate(obj); },Addressables.MergeMode.Intersection);
  • 所有组的加载和发布都选择本地路径,先把包打到本地路径再说。可以在这里看到打包出来的路径。

    • LocalBuildPath - 打包路径
    • LocalLoadPath - 加载路径
    • 可以点击每一个组看 Inspect 窗口预览实际路径
  • 点击打包

  • 在打包路径可以找到实际打出来的 AB 包,在 PC 端和其他平台默认文件夹可能不一样

  • 有个 catalog.json 是目录文件,记录 AB 包的资源信息。如果发现是catalog.bundle, 是因为勾选了AddressableAssetSettings的Compress Local Catalog的配置

  • 加载路径要在运行时才去解析的

  • 注意:使用默认设置,当发布应用程序时,会自动帮我们将 AB 包放入 StreamingAssets 文件夹中

    • 要在发布应用程序后才能看出我们打出来的 AB 包在 发布应用程序的StreamingAssets

    • 如果自己创建Profile并激活,修改了LocalBuildPath和LocalLoadPath这两个路径。打AB包后,设置成AB包模式加载也可以正常加载出来。

    • 但是假如发布应用程序后,运行发布的应用程序是加载不出立方体的。因为我们修改了本地构建和加载两个路径,所以不会自动帮我们在发布应用程序创建StreamingAssets,并且没有我们打出来的AB包。因为没有AB包,我们又想从AB包加载,立方体当然出不来。

  • 我们需要在编辑器的Asset目录下,创建StreamingAssets文件夹。自己将打出来的所有AB包放入 StreamingAssets 文件夹中。然后再次发布应用程序。运行应用程序才能加载立方体成功。

  • 不建议大家修改默认的本地构建和加载路径

    • 因为如果你修改了,在开发时也能正常从 AB 包加载,但是打包后立方体是创建不出来的
    • 需要自己手动的去把打出来的AB包相关内容移动到Project窗口下的StreamingAssets 文件夹中,再打包,这样打包出来的应用程序才能看到 StreamingAssets 下有相关的 AB 包。很麻烦

模拟远端发布资源

  • 第一步:将本机模拟为一台资源服务器,通过 Unity 自带工具或者第三方工具端口号。比如我们打开Hosting窗口,设置端口号并且Enable勾选。勾选后下方有信息打印出来。使用本机模拟的话记得要点击启用并记住Ip地址。

  • 第二步:设置远端加载路径,注意使用IP地址和端口号拼接,最后再拼接平台名。

    • 远程构建路径和其他路径不需要修改,因为现在是把本机模拟。我们现在把远端生成路径设置成ServerData拼接平台名,ServerData文件夹是Asset同级文件夹,默认存在 。等一下打AB包时就会把AB 包生成在ServerData拼接平台名这个路径下。
  • 第三步:切换某些组为远端加载和构建。比如现在我们只设置GameObject组是从远端加载,其他组还是本地加载。

    • 注意要把 AddressablesAssetSetting 配置中的构建远程目录勾选,否则打包打出来没有目录文件相关。CleanBuuild一次后,重新点击打包,要有对应的包和目录文件才算成功



  • 第四步:重新关闭Enable勾选,在勾选Enable。开启服务器后,可以看到下方提示信息说可以从两个文件夹下加载 AB 包了。一个是从本地加载,一个是远程模拟文件夹路径中加载。

  • 第五步:在编辑器下运行。会从模拟从远端加载(只不过现在远端是本机而已),可以生成Cube。

  • 注意:Addressable Hosting窗口创建的本地服务器有时候会失效

实际上的远端发布资源

  • 在远程机使用 HFS 创建 http 服务器,注意设置防火墙允许外部访问,端口号不要被占用

  • 修改本地远端加载路径为 http 路径,这样加载AB包的话就是真正走了远端,不是模拟的

  • 把模拟本地作为服务器的Enable取消勾选。要删除之前打的AB包,重新打包一次,保证AB包是最新的且有目录文件,并且保证打包时组的配置中已经切换了远程加载包的路径,否则可能还是用模拟的路径,会有问题。把打好的 AB 包上传到 http 服务器上(学习时直接复制,商业项目再自己写上传逻辑)

  • 测试浏览器能不能访问

  • 现在在编辑器中运行,这样就真正的从远端加载资源

总结

  • 一个项目中的资源到底是本地还是远端,根据实际情况而定
    1. 对于需要热更新的网络游戏
      • 默认基础资源作为本地资源,大部分资源作为远端资源
    2. 对于不需要热更新的单机游戏
      • 所有的资源都是本地资源
  • 具体采用的打包策略根据实际情况来定


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏