配置Addressables


在使用Addressables之前,你需要对它进行配置。首先要做的就是初始化。

当你第一次打开Addressables Groups窗口时,系统会提示你需要创建设置文件。

[size=16]第一次打开Addressables Groups面板[/size]
Addressables使用一些ScriptableObject对象来保存你的配置。这些对象都被存放在[color=purple]Assets/AddressableAssetsData[/color]目录内。记得将该目录添加到你的版本管理中。

当你创建完配置文件之后,Addressables的主配置文件[color=purple]AddressableAssetSettings[/color]就会出现在上面提到的目录下。
[size=16]可以看到配置项还是挺多的[/size]

我们来分别看一下都有哪几块配置:

Profile: 这一块只有一个选择使用哪个Profile的列表框和一个设置Profile具体参数的”Manage Profiles”按钮。

而Profile,其实就是一些路径配置

[size=16]Addressables Profiles窗口[/size]

Diagnostics: 这一块就是用于分析用的配置。

[size=16][B]Send Profiler Events[/B]: 是否将事件发送到Addressables Profiler,这样你就可以在Addressables Profiler(非Unity Profiler)中看到加载和打包的一些事件。
[B]Log Runtime Exceptions[/B]: 当有异常发生的时候,是否调用[color=red]ResourceManager.ExceptionHandler[/color]进行处理。[/size]

Catalog: Catalog的介绍可以看一下这篇文章

[size=16][B]Player Version Override[/B]: 当创建Catalog文件的时候使用这里文本作为Catalog文件名的尾部,否则则使用时间戳。即若这里填上abc,则文件名为Catalog_abc.json。若为空,则文件名为catalog_2022.02.14.09.55.17.json,即在后面附加上UTC时间。
[B]Compress Local Catalog[/B]: 勾选这个选项,将会把Catalog文件打成catalog.bundle,但是会增加打包和加载的处理时间。
[B]Optimize Catalog Size[/B]: 勾选这个选项,会优化Catalog中重复的internal ID来减小Catalog文件的尺寸,并在加载的时候进行重建。会增加加载时间。[/size]

Content Update: 这一块是设定如何进行内容更新,也就是热更。

[size=16][B]Disable Catalog Update on Startup[/B]: 是否在启动的时候进行Catalog的更新。
[B]Content State Build Path[/B]: Addressables打包资源的时候会生成一个[color=purple]addressables_content_state.bin[/color]文件,默认是生成在BuildPath同级目录,但是你也可以在这里设置它的生成位置,可以是绝对路径,也可以是一个相对于工程路径的相对路径(Assets目录的上一级)。
[B]Build Remote Catalog[/B]: 是否生成用于放在热更服务器的Catalog的文件,包括json和对应的hash。
[B]Build & Load Paths[/B]: 在哪里生成和加载上面提到的[B]Remote Catalog[/B],这里是一个[B]Profile[/B]的选择框。下方则是对应路径的显示。[/size]

Downloads: 这里是对资源下载时的一些设置。

[size=16][B]Custom certificate handler[/B]: 自定义的验证处理器。这里会列出你所有派生自[color=blue]CertificateHandler[/color]的类名。在初始化的时候,会创建一个实例保存在[color=blue]ResourceManager.CertificateHandlerInstance[/color],并赋值给[color=blue]WebRequest.certificateHandler[/color]。
[B]Max Concurrent Web Requests[/B]: 下载时的最大请求数。
[B]Catalog Download Timeout[/B]: 下载Catalog文件时的超时时间。[/size]

Build: 这一块是对打包资源的一些设置项。

[size=16][B]Build Addressables on Player Build[/B]: 是否在输出Player的同时进行Addressables的打包。这个选项只有在Unity2021.2+之后版本才会出现。选项有打开(Build Addressables content on Player Build)、关闭(Do not Build Addressables content on Player Build)和按照Preferences中的设置(Use global Settings(stored in preferences))。
[B]Ignore Invalid/Unsupported Files in Build[/B]: 当有不支持的资产,或者[color=purple]Addressables Address[/color]不合法(比如含有[])的时候,Addressables在Build的时候会抛出异常并且停止。如果勾上这个选项,就只会报一个Warning并且忽略这个资产。
[B]Unique Bundle IDs[/B]: 打开这个选项,会让Addressables在bundle名字上加上hash值,而这个hash值是通过该bundle以及所有的依赖项所计算出来的。打开这个选项可以让你避免assetbundle加载冲突,即你可以在加载了本地老的assetbundle的情况下,再加载新更新下来的新的有更新的assetbundle(虽然基础名字不变,但是名字里的hash值变了)。缺点就是一旦依赖项被修改了,所有相关assetbundle包名都会被修改(hash值变化了)。
[B]Contiguous Bundles[/B]: 按照官方文档的说法,勾上这个选项可以生成更有效的assetbundle结构。按照代码上来看,勾上选项会造成生成assetbundle中的资源Index的差别。勾上使用的是[color=red]PrefabPackedIdentifiers[/color],而不勾则用的是[color=red]Unity5PackedIdentifiers[/color]。它俩的差异是前者用的是SpookyHash或者MD5,而后者用的是MD4。
[B]Non-Recursive Dependency Calculation[/B]: 这个选项打开之后会不再检查递归依赖并提高打包速度和减少运行时内存开销。官方文档举了两个例子:
· 假设有Assetbundle 1中有个Prefab A,引用了Assetbundle 2中的Material B,若该选项关闭,则Unity会对该Material计算两次依赖(一次是处理它自己的时候,一次是处理Prefab A的时候)。若该选项打开,则只会计算一次(处理Prefab A时不会计算Material B的依赖)。
· 假设有很多场景引用到一个相同的Material。如果该选项关闭,则Unity会依次打开每一个场景来计算shader的使用。如果打开该选项,则会去掉该过程。
如果用的是Unity 2021.2+的新工程,则该选项会被默认打开。
[B]Shader Bundle Naming Prefix[/B]: 选择Unity自带shader所打包的AssetBundle的前缀。选项有使用工程名的Hash值(Project Name Hash)、使用默认的组ID(Default Group GUID)和自定义(Custom)。
[B]Shader Bundle Custom Prefix[/B]: 当上面选择Custom时出现,自定义的bundle前缀。
[B]MonoScript Bundle Custom Prefix[/B]: 选择Monoscript所打包的AssetBundle的前缀。选项跟上面[B]Shader Bundle Naming Prefix[/B]一样,但是多了一个不打Monoscript的Assetbundle包(Disable Monoscript Bundle Build)的选项。
[B]Strip Unity Version From AssetBundles[/B]: 勾上该选项,会移除AssetBundle里的Unity版本信息(有可能让AssetStudio等类似工具无法查看AssetBundle内容)。
[B]Disable Visible Sub Asset Representations[/B]: 勾上该选项,会移除所有[color=purple]Sub Asset[/color]的信息,将无法直接加载[color=purple]Sub Asset[/color]。[/size]

Build and Play Mode Scripts: 这里是所有Build Script和PlayMode Script的列表,具体的相关分析可以看这篇文章

这里添加了系统里的Build Script和PlayMode Script,如果你写了自定义的相关脚本,必须添加到这里才能使用。Addressables自带的几个脚本在[color=purple]AddressableAssetData/DataBuilders[/color]目录内。

Asset Group Templates: 这一块是Group的模板。

当你在Group窗口里创建新组的时候,可以看到你当前设置的所有模板。



[size=16]Packed Assets模板[/size]
具体模板的配置内容可以参考这篇文章

Initialization object list: 初始化对象列表。

这里是运行时初始化的对象列表。初始化的过程中会实例化这个列表中的每一个对象并依次执行。图中是默认的初始化AssetBundle缓存的对象。你可以通过实现[color=red]IObjectInitializationDataProvider[/color]接口并添加到这个列表来实现自定义的初始化步骤。


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注