Unity - Addressables项目总结(一):基础工作流

发布网友 发布时间:2024-10-23 22:16

我来回答

1个回答

热心网友 时间:2024-10-23 23:05

近期未更新,现已投入新项目,初期采用Addressables进行资源管理。需对资源从打包、发布、运行时进行完善,期间遇到不少问题,也有不少难以理解的使用方式,现记录如下。

一、综述 & Start

1.1 综述

Unity默认的资源打包发布方式是AssetBundle,Addressables在AssetBundle基础上,处理了资源在项目整个流程中的管理。具体涉及资源打包、加载与卸载以及热更。传统的AssetBundle对于资源管理来说相对繁琐,主要体现在以下几个方面:

对于成熟的项目,通常已有一套完善的工具链,可能对于部分打包步骤不太直观方便,但整体流程较为完善,一般也不用考虑Addressables。如果是在项目前期,Addressables可能是一个不错的工具,其功能特性如下:

1.2 Start

(1)安装

(2)拉取Package到本地

在Package Manager中拉取的内容是无法修改的,若需要修改源码,则需要将Cache文件夹中的缓存放到Package(包括依赖package)

(3)标记资源:将资源或文件夹放入对应Group即可

(4)配置Profile

只需要配置远端路径(Http服务可使用Addressables自带的Host Services,但建议使用HFS方便测试)

(5)发布资源

Addressbales提供了两种资源发布模式:全量发布;增量发布

(6)选择Play Mode & Start

fastest模式通过AssetDatabase加载资源,Editor下不需要发布资源。Existing Build会真实得加载AB包,Editor下需要打包资源。

二、Settings

2.1 AssetGroup

Addressbales以GUI的方式较为便捷得对资源进行分组打包管理。默认每个分组的资源文件存在于AddressableAssetsData/AssetGroups目录下,分组可以使用相同策略对资源批量管理。

选中Group可以看到其属性面板。Build & Load Paths定义Group的打包与加载路径,该路径可在Profile中修改。包体分为本地包与远程包。

Group提供三种压缩方式:无压缩、LZ4、LZMA。LZ4包体大小中等,解压较快,可以只解压部分资源;LZMA包体较小,但解压资源较慢,只能将资源全部解压。通常选择LZ4。

这三个选项表示打包时,是否将资源的Address、GUID、Label写入包体中。对于有分包更新需求的情况下,建议都勾选上。

Internal Asset Naming Mode:如何为内部asset命名

Asset Load Mode、Asset Provider、Asset Bundle Provider通常不用修改,这三个选项用于控制asset的加载方式、AB包的获取方式。如果存在自定义的处理方式,可自行选择。

2.2 AddressableAssetSettings

Profile定义了各种路径参数,切换不同的路径以灵活映射到的路径。(修改路径后需要重新Build资源后才能生效,因为locator的下载路径是在Build时序列化到本地的。体验上不太舒服~~)

Addressables提供了三种Editor下资源加载方式:Use the Asset database(Asset database加载)、Simulate groups(模拟Group处理)、Use existing build(加载实际包体资源)

三、打包处理

3.1 打全量包

处理步骤如下: (1)根据需求配置Group的构建路径(Remote\Local) (2)根据远端路径(CDN\HFS)修改Profile,选择需要的Profile (3)修改资源版本号(如果只是本地测试不需要,但若是正式发布需要修改,避免影响老版本) (4)点击New Build/Default Build Script进行资源打包 Profile定义Build和Load路径,若需要从多个项目加载资源的情况(比如美术、Scene单独分离出工程进行制作),可以定义不同的Profile以满足需求。对于大部分工程来说,通常不需要修改local资源相管路径,这些工程会构建到相同的目录中。 注意:路径字符(以及自动生成的子目录)长度限制在260个character,否则会构建失败 默认的local build路径:Library\com.unity.addressables\aa\平台\系统 默认的local load路径:Editor模式与构建路径相同;实机运行时被解析为StreamingAssets目录 Build输出文件:

注意:使用默认的local路径,在构建应用时,Addressbales会将打包资源拷贝到StreamingAssets目录,在应用构建结束后再将资源移除。如果使用自定义的local路径,需要自己处理这一过程。 默认的Remote Build路径:ServerData\平台 默认的Remote Load路径:为实际的下载url,必须要启用相管服务(CDN\HFS)后自行定义。 构建的文件:

3.2 打增量包

全量包会重新构建所有资源,当我们只需要对一部分资源修改时,这会产生很多不必要的工作。Addressbales提供了根据资源更新记录进行增量式更新

需要注意的是,能够进行增量式更新的前提是存在addressables_content_state.bin文件,并且不能修改资源版本号。此文件记录了资源的状态数据。当我们构建全量包时,会在“Assets\AddressableAssetsData\平台”创建该文件,一定不要手动修改此文件。只有相同版本号的catalog才会检测差异,从而更新。

四、运行时的资源

4.1 资源加载

Addressables提供了通过address、label、AssetReference以及IResourceLocation进行资源加载。在执行异步操作时,会执行以下流程:

若加载失败,相关信息会存储在AsyncOperationHandle.OperationException。默认情况下,加载失败不会抛出异常,如果需要可以为ResourceManager.ExceptionHandler设置回调。此外还可以通过设置抛出异常。

4.2 资源卸载

通过 Addressables.Release可以卸载资源、实例、handle。释放handle可以减少资源的引用计数,并且handle会失效。如果不需要使用回调结果,某些API接口提供了自动的handle回收参数,例如 UnloadSceneAsync。 即便handle回调失败了,仍然需要对其进行释放。通常情况下,Addressables会自动释放Operation失败期间的资源,但手动释放handle仍然是有必要的。 Addressables.LoadAssetsAsync是无法取消的,但如果在操作完成之前释放对应的handle,会减少对handle引用,在资源加载完成后会自动释放。
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com