Addressable Asset System初探(二)

本文深入探讨Unity的Addressable Assets系统,讲解其核心优势,包括内容的灵活组织、构建及加载方式,以及AssetGroupSchemas、构建脚本、迭代模式等关键概念。此外,还介绍了初始化对象和内容更新工作流程,为游戏开发者提供了全面的指导。

上一篇
https://blog.youkuaiyun.com/EIE08027/article/details/84067544

OC](目录)

Addressable Assets 开发

可寻址资产的主要优势之一是将内容排列方式,内容构建方式以及内容加载方式分离开来。传统上,这些发展方面紧密相连。如果将内容安排到Resources目录中,则内容将内置到基本播放器中,您必须通过调用Resources.Load方法并提供资源路径来加载内容。
要访问存储在其他位置的内容,您使用了直接引用或资产包。如果你使用了资产包,那么你再次按路径加载,将你的加载和你的安排绑在一起。如果您的Asset捆绑包是远程的,或者在其他捆绑包中具有依赖关系,则必须编写代码来管理所有捆绑包的下载,加载和卸载。
为资产提供一个地址,允许您通过该地址加载它,无论它在您的项目中的位置或其构建方式。您可以毫无问题地更改资产的路径或文件名。您还可以将资源从资源或本地构建目标移动到其他构建位置(包括远程构建位置),而不会使您的加载代码发生变化。

Asset Group Schemas

Schema定义了一组数据,可以通过其Inspector面板附加到Asset Group资产组。 附加到组的Schemas 集定义了在构建期间如何处理其内容。 例如,在打包模式下构建时,将附加了BundledAssetGroupSchema的组用作捆绑包的源。 可以将Schemas 集合组合到模式模板中,这些模板将用于定义新组。 可以通过Inspector将架构模板添加到主要的可寻址资产设置资产中。

Build Scripts

构建脚本在项目中表示为实现IDataBuilder接口的ScriptableObject资产。 用户可以创建自己的构建脚本,并通过其检查器将它们添加到可寻址资产设置对象中。 目前已经实现了3个脚本来支持完整的播放器构建和3个播放模式,以便在编辑器中进行迭代。

Play Mode Iteration

Addressable Assets有三个构建脚本,可以创建播放模式数据,以帮助您加速应用程序开发。

  • Fast mode
    允许您在完成游戏流程时快速运行游戏。快速模式直接通过资产数据库加载资产,以便快速迭代,无需分析或创建资产包。fast mode速度最快,它会直接读取Asset的Path对资源进行加载,并不会打包资源。
  • Virtual mode
    分析布局和依赖关系的内容,而无需创建资产包。资产通过ResourceManager从资产数据库加载,就好像它们是通过bundle加载一样。要查看在游戏过程中何时加载/卸载软件包,请在Addressable Profiler窗口中查看资产使用情况。要打开Addressable Profiler窗口,请导航到Window> Asset Management> Addressable Profiler。
  • Packed mode(打包模式)
    完全打包内容并在磁盘上创建资产包。此模式花费大量时间准备并为资源加载提供最准确的行为。

每种模式在开发和部署期间都有自己的时间和地点。
下表显示了特定模式有用的开发周期段。
在这里插入图片描述

Initialization objects

您可以将对象附加到可寻址资源设置,并在运行时将它们传递给初始化过程。 CacheInitializationSettings对象用于在运行时控制Unity的缓存API。 要创建自己的初始化对象,可以创建一个实现IObjectInitializationDataProvider接口的ScriptableObject。 它是系统的编辑器组件,负责创建使用运行时数据序列化的ObjectInitializationData。
这块我的理解是,如果要在Addressable Asset System初始化之前做些事情的话,可以插入。具体的方法还没试过。

Content update workflow

//TODO

在Unity引擎中使用Addressable Asset System(以下简称UAAS)实现跨项目调用资源是一种较为高级的使用方式,适用于多个Unity项目之间需要共享资源的情况。该系统通过异步加载和地址寻址的方式,使得资源可以从本地或远程服务器加载,并支持复杂的依赖关系管理[^1]。 要实现跨项目调用资源,主要可以通过以下几种方式进行: ### 1. 使用远程服务器部署Addressables内容 将一个项目的Addressable资源打包并部署到远程服务器上,另一个项目通过指定相同的地址从网络加载这些资源。这种方式适合团队协作、资源共享以及动态更新场景。 - 在源项目中配置Addressables组,并将资源标记为可寻址。 - 使用`Addressables.BuildScriptPackedMode`进行构建,生成包含资源及其依赖项的包。 - 将构建输出(通常是`bin`目录下的文件)上传至Web服务器。 - 在目标项目中配置Remote Catalog URL指向服务器上的`catalog.json`文件。 - 使用标准API如`Addressables.LoadAssetAsync<T>(address)`进行资源加载[^2]。 示例代码如下: ```csharp using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement.AsyncOperations; public class LoadRemoteAsset : MonoBehaviour { public string assetAddress; void Start() { Addressables.LoadAssetAsync<GameObject>(assetAddress).Completed += OnLoadDone; } private void OnLoadDone(AsyncOperationHandle<GameObject> obj) { if (obj.Status == AsyncOperationStatus.Succeeded) { Instantiate(obj.Result); } else { Debug.LogError("Failed to load asset from remote."); } } } ``` ### 2. 使用本地共享文件夹或符号链接 对于处于同一开发环境下的多个项目,可以设置共享文件夹或将一个项目的Addressables构建输出作为软链接引入另一个项目中。 - 构建源项目的Addressables资源到本地路径。 - 在目标项目中配置Catalog源为该本地路径。 - 加载时使用相同地址即可访问共享资源[^3]。 这种方式适合于内部测试或持续集成流程中,避免频繁上传/下载资源。 ### 3. 使用Unity Package或自定义工具同步资源 将源项目中的Addressables资源打包成`.unitypackage`,然后导入到目标项目中。或者开发自定义脚本,在构建后自动复制资源到其他项目的Assets目录下。 - 导出资源时确保保留Addressable设置。 - 目标项目导入后仍可通过原始地址加载资源[^4]。 ### 注意事项: - 确保两个项目使用的Addressables版本一致,以避免兼容性问题。 - 跨项目调用资源时应考虑依赖项完整性,建议使用`Addressables.DownloadDependenciesAsync`预加载所有依赖项。 - 如果资源地址在不同项目中有冲突,需统一命名空间或使用标签(Label)来组织资源。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值