Addressable Assets配置系统可以创建和设置一些属性来决定资源如何被打包。这些配置可以指定资源是属于本地设备的还是属于远程托管服务器上的。
对于每一个配置文件,你所修改的每一个属性,都直接影响所有构建场景下的路径。而且一次搞定。
在Unity编辑器中有很多种方式可以打开配置窗口:
- 点击菜单Windows > Asset Management > Addressables > Profiles。
- 打开Addressables group窗口(Windows > Asset Management > Addressables > Groups),然后点击菜单Tools > Profiles。
- 打开Addressables group窗口(Windows > Asset Management > Addressables > Groups),然后点击菜单Profile > Manage Profiles。
- 还可以在
AddressableAssetSettings
的Inspector中打开。
The Addressables Profiles window showing two profiles.
配置中默认有五个变量:
- BuildTarget
- LocalBuildPath
- LocalLoadPath
- RemoteBuildPath
- RemoteLoadPath
你可以随便增加或移除变量。
点击菜单Create > Profile创建一个新配置。表中会出现一行新的配置。右键点击配置名称,在弹出的右键菜单中有Set Active
、Rename Profile
、Delete Profile
三个选项。
每一个配置必须定义所有变量,当你创建了一个新的配置,所有的值都会拷贝当前激活的配置。
点击菜单 Create > Variable为配置创建一个新的变量。在弹出的窗口中设定新变量的名称和值,然后点击Save,新的变量便会出现在配置表的末尾。
右键点击变量名称,可以重命名、删除这个变量。你同样也可以删除系统提供的变量。
所有的变量都是string类型。通常,只需要输入详细地址或值即可。但是还有两种语法格式可以用:
- 中括号
[]
。被中括号包围的变量在构建的时候会被重新赋值。它可以是其他的配置变量(比如[BuildTarget]
)或者是代码中的变量(比如[UnityEditor.EditorUserBuildSettings.activeBuildTarget]
),在构建资源时,资源组被处理完后,这些被中括号包围的变量都会被重新赋值,然后最终结果会被写入到catalog中。 - 大括号
{}
。被大括号包围的变量是会在运行时被重新赋值。通常一般都是代码中的变量(比如{UnityEngine.AddressableAssets.Addressables.RuntimePath})。
例如,有一个加载路径:{MyNamespace.MyClass.MyURL}/content/[BuildTarget]},它被设置在一个资源组上,这个资源组会生成一个名为“trees.bundle”的资源包。在构建的时候,这个bundle的加载路径会以*{MyNamespace.MyClass.MyURL}/content/Android/trees.bundle}*记录在catalog中。然后游戏运行后,catalog会被profile系统处理,MyNamespace.MyClass.MyURL最终会被替换为http://myinternet.com/content/Android/trees.bundle
。
一旦在配置文件中设置了必要的变量,你可以为一个资源组应用这些变量。
设置这些路径你需要这样:
- 在Project窗口中选中一个资源组。
- 在它的Inspector窗口中,在属性Content Packing & Loading > Build and Load Paths下,从下拉框中选择需要的Build Path和Load Path。
需要注意的是,不要直接输入路径,而是选择之前在Profiles窗口中定义好的变量。当你选择后,对应的详细路径会显示在下拉列表下面。
一定要小心,build path和load path必须要匹配,否则你无法从远程服务器上加载到你构建在本地路径上的资源。
下面的例子是演示了开发阶段的内容。
Content with local and remote bundles stored locally for development.
在开发过程中,你的本地和远程bundles都会是用本地目录,看下图中“Local”的那一行。
Paths set for local development and production.
在这个例子中,事实上本地加载和远程加载都使用的本地路径。对于开发过程中来说,搭建一个远程服务器是比较麻烦的。所以当资源准备好了,你需要把bundles提交到远程托管服务器上。如下图。
Content with remote bundle moved to a server for production.
在这种情况下,你只需要在配置中选择“Production”即可。不需要修改你的资源组,就可以把所有的远程资源变成真正的远程资源。