开头很简单,最难的是坚持。|

陈侠云

园龄:2年10个月粉丝:1关注:1

Unity Addresable打包总结第一弹

前言

使用AB包很久了,一直没有机会做一个系统的总结,趁现在准备离职,时间空闲比较多,将项目内的Addresable使用经验大致的分析总结一下,以作日后备用。

使用介绍

下方的引用链接中,发哥已经总结的很详细了,但我这里还是稍微介绍一下基本流程。

基本流程

  1. 在Package Manager中导入Addressables
    image
  2. 导入完成后,点击菜单栏 Window/Asset Management/Addressables/Group 处,打开Addressables Groups,点击Create Addressables Setting,生成配置文件,就可以正常使用了
    image
  3. 然后我们可以看到Addressables Groups生成了一个默认的组:Default Local Group (Default)。Addressables默认按照Group为颗粒进行AssetBundle打包,比如把资源Cube,Sphere放在 Default Local Group 组里,那它们会被打入同一个AB包中(当然也可以拆分,我后续介绍参数时顺便介绍)。除了把资源单独拉进来外,我们也可以选择直接拖拽上层文件夹进来,我这里就选择拖拽文件夹进来。
    image
  4. 点击 Addressables Groups 窗口中的,选择 Build->New Build->Default Build Script,进行AB打包,等待它资源打包完成即可。根据AddressableAssetsData/AssetGroups/Default Local Group.asset文件,我们可以找到我们打包的路径。
    image
  5. 其中这个就是我们打成功的包体。
    image
  6. 在将该Unity工程,输出到PC端平台看看,我们可以在输出游戏AABB_Data/StreamingAssets/aa/StandaloneWindows64目录下找到对应的ab资源文件。
    image
  7. 说完了打包,我们来看看怎么去加载ab资源。我们使用Addressables.LoadAssetAsync方法加载资源,监听 Completed 回调,在回调中拿到资源然后进行操作:
public class MainLoadRes : MonoBehaviour
{
    void Start()
    {
        Addressables.LoadAssetAsync<GameObject>("Assets/Res/Cube.prefab").Completed += (handle) =>
        {
            GameObject prefab = handle.Result;      // 将资源加载到内存
            GameObject go = Instantiate(prefab);    // 实例化资源对象
        };
    }
}
  1. 将该脚本挂在场景中某个gameObject上,就可以在运行时生成得到Cube:
    image

Addressables Groups

image

Create

  1. 点击 Create->Group->Packed Assets 以创建新组,创建完成之后,可以通过右键 Rename 的方式进行改名。
    image
  2. 新生成的组Addressables会给它分配一个资产文件,目录在 AddressableAssetsData/AssetGroups 下:
    image

Play Mode

image

  1. Use Asset Database (fastest):直接从AssetDatabase下加载资源,不需要打包,一般在项目开发阶段采用。
  2. Simulate Groups (advanced):模拟从AssetBundle包中加载资源的情况,也不需要打包,一般在项目开发阶段后期,分析资源引用情况。
  3. Use Exising Build(requires built groups):这个模式下需要真正的打出AB包,它会根据Load Path去加载真正的AB文件并读取。

Build

  1. New Build:执行打包脚本进行整包构建。
  2. Update a Previous Build:执行基于早期构建的差异更新。
  3. Clean Build:清理目前的包体构建。

Group Windows

首次生成Addressable Group,会包含2个默认的Group:

  1. Built in Data:包含在任何项目资源文件夹中的资源以及构建设置列表中包含的任何场景。(除非从资源文件夹或场景列表中移除,否则这些资源不能被设置为可寻址的。)
  2. Default Local Group (Default):该组最初为空,但可设置为可寻址的任何资产都会添加到该组中。 设置该组后,其资产将按照本地构建路径构建,并包含在项目构建中。 如果需要,可以更改名称和设置,并将另一个组设为默认组。

AddressableAssetSettings

image
image

Profile

选择活动配置文件,它决定了可寻址构建脚本使用的变量值。

Diagnostics

  • Log Runtime Exceptions:记录资产加载操作的运行时异常,错误信息记录在AsyncOperationHandle.OperationException参数中。
    默认情况下,系统只记录警告和错误。要想启用详细记录,可以打开 Project Settings -> Player -> Other Settings -> Configuration, 添加 ADDRESSABLE_LOG_ALL 到Scripting Define Symbols域中。

Catalog

  • Player Version Override:覆盖用于创建远程目录名称的时间戳。 如果设置,远程目录将命名为 Catalog_<Player Version Override>.json。 如果留空,Unity 将使用时间戳;如果每次构建都使用唯一的远程目录名称,就可以在同一基础 URL 上托管多个版本的内容。 如果每次构建都使用相同的覆盖字符串,那么所有玩家都会加载新目录。 玩家更新构建也总是使用与更新构建相同的远程目录名称。
  • Compress Local Catalog:启用该属性可在压缩的 AssetBundle 文件中构建目录。 该属性可减少目录的存储空间,但会增加目录的构建和加载时间。
  • Build Remote Catalog:启用此属性可创建内容目录副本,以便存储在远程服务器上。 启用此属性后,可以使用以下选项:
    • Build & Load Paths:设置构建和加载远程目录的位置。 从列表中选择一个配置文件路径对,如果要分别设置构建和加载路径,请选择<custom>。
    • Build Path:仅在将 "构建和加载路径 "设置为<custom>时显示。 设置构建远程目录的位置。 通常情况下,应使用 RemoteBuildPath 配置文件变量。
    • Load Path:仅在将 "构建和加载路径 "设置为<custom>时显示。 设置访问远程目录的 URL。 通常情况下,应使用 RemoteLoadPath 配置文件变量。
  • Only update catalogs manually:启用此属性可在寻址系统运行时初始化时禁用自动检查更新远程目录的功能。 可以手动检查更新的目录。
  • Internal Asset Naming Mode:资源命名模式,用于在资源包内为资源命名。通过将长路径替换为更短的字符串,可以减小catalog的大小。对于发布版本,推荐使用动态命名;对于开发版本,推荐使用完整路径命名。
  • Internal Bundle Id Mode:指定了捆绑包内部ID的生成方式。必须设置为GroupGuid或GroupGuidProjectIdHash,以确保设备上的缓存正常工作。
  • Asset Load Mode:确定了访问资源时它们是如何加载的。
    • Requested Asset And Dependencies:将只加载需要的资源(推荐)。
    • All Packed Assets And Dependencies:将加载所有打包在一起的资源。当需要将所有资源加载到内存中时,最好使用这种方式。(推荐用于Switch平台)
  • Asset Provider:用于从AssetBundles加载资源的提供者。只有在你有自定义资源提供者时才需要修改。
  • Asset Bundle Provider:用于加载AssetBundles(不是其中的资源)的提供者。只有在你有自定义AssetBundle提供者时才需要修改。

Update a Previous Build

若要启用,必须勾选 Catalog 中的 Build Remote Catalog。

  • Check for Update Issues:选择是否作为更新的一部分执行内容更新限制,以及如何处理更新结果。
  • Content State Build Path:设置默认构建脚本构建内容状态文件的位置。

Downloads

  • Custom certificate handler:设置用于自定义证书处理的类。 该列表包含项目中所有扩展 UnityEngine.Networking.CertificateHandler 的类。
  • Max Concurrent Web Requests:设置并发网络请求的最大数量。 系统会对超出此限制的请求进行排队。 建议同时进行 2 至 4 次下载,以达到最佳下载速度。
  • Catalog Download Timeout:设置下载目录文件的等待时间。 如果设置为 0,则没有超时。

Build

  • Build Addressables on Player Build:选择 Unity 如何将 Addressables 内容作为播放器构建的一部分。 在播放器构建时构建 Addresables 内容和在播放器构建时不构建 Addressable 内容属性覆盖当前项目的全局首选项,并影响构建项目的所有贡献者。 否则,全局首选项值适用于所有 Unity 项目。
    • Build Addressables content on Player Build:在创建播放器时,始终要创建可寻址内容。
    • Do not Build Addressables content on Player Build:在构建播放器时,切勿构建可寻址内容。 如果修改了可寻址内容,必须在构建播放器之前手动重建。
    • Use global Settings (stored in preferences):使用 Unity 编辑器首选项 "可寻址 "中指定的值。
  • Ignore Invalid/Unsupported Files in Build:启用此属性可从构建脚本中排除无效或不支持的文件,而不是中止构建。
  • Unique Bundle IDs:启用此属性可为每次构建中的软件包创建唯一名称。
  • Contiguous Bundles:启用此属性可生成更有效的捆绑包布局。 如果您的捆绑包是由 Addressables 1.12.1 或更早版本生成的,请禁用此属性以尽量减少捆绑包的更改。
  • Non-Recursive Dependency Calculation:当资产具有循环依赖关系时,启用此属性可缩短构建时间并减少运行时内存开销。 例如,分配给 "捆绑包 A "的一个预制板引用了分配给 "捆绑包 B "的一个材质。 在许多场景引用相同材质的例子中,如果禁用此属性,Unity 会打开每个场景计算着色器的使用情况,这将是一项成本很高的操作。 如果启用此属性,Unity 只加载材质,而无需打开任何场景来计算依赖关系。 使用 2021.2 或更高版本的 Unity 时,默认启用此选项。 禁用此选项会使以前构建的捆绑包失效,因为重建的捆绑包具有不同的构建布局。 因此,除非您已发送构建,否则请启用此属性。 启用该选项后,某些循环依赖关系可能无法加载,因为引用的资产总是被分配到相同的捆绑包位置,即使构建中添加了更多内容也是如此。 Monoscripts 经常出现这个问题。 构建 MonoScript 捆绑程序有助于解决这些加载失败问题。
  • Strip Unity Version From AssetBundles:启用此属性可从捆绑包标题中移除 Unity 版本。
  • Disable Visible Sub Asset Representations:如果不直接使用子对象(如精灵或子模型),启用此属性可缩短构建时间。
  • Shared Bundle Settings:确定设置用于共享捆绑包(Monoscript 和 UnityBuiltInAssets)的组。 默认情况下,这是默认组。
  • Shared Bundle Settings Group:组,其设置用于共享捆绑包(Monoscript 和 UnityBuiltInAssets)。
  • Built In Bundle Naming Prefix:选择如何命名为 Unity 内置资源生成的捆绑包。
  • MonoScript Bundle Naming Prefix:选择如何命名包含所有 MonoScripts 的捆绑包。 捆绑包可确保 Unity 在任何 MonoBehaviours 引用所有 Monoscript 之前加载它们。 它还能减少重复或复杂的 Monoscript 依赖关系的数量,从而降低运行时的内存开销。

引用

[1].【游戏开发探究】Unity Addressables资源管理方式用起来太爽了,资源打包、加载、热更变得如此轻松(Addressable Asset System | 简称AA)
[2]. Addressables Manual
[3]. Addressable技术总结
[4], 静态包、动态包有什么区别?何时使用增量更新?Addressables 更新流程大梳理

本文作者:陈侠云

本文链接:https://www.cnblogs.com/chenxiayun/p/18730010

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   陈侠云  阅读(59)  评论(0编辑  收藏  举报
//雪花飘落效果
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起