学习 Unity Addressables

924 阅读3分钟

学习 Unity Addressables

Addressables 对比 AssetBundle 有什么优势

AssetBundle 缺点
资源打包的冗余问题
资源打包的方式不直观
中间有很多细节(比如资源进首包,需要将ab包放到StreamingAssets目录下,再移除以避免Unity重新加载)
资源依赖的问题
资源热更新方案(增量更新、文件对比、资源下载状态……)
同步与异步资源加载
内存~Profiler
等其他问题
Addressables 优点
提供GUI的方式对资源打包进行管理,不需要频繁修改打包代码,对资源管理更加便捷
提供了加载实体AB包的开发模式,能够模拟真机的资源加载方式
资源依赖处理(打包、加载)
傻瓜式的资源查询、更新方式(优劣参半),随用随下
打包检测工具

目前 Addressables 是 Unity 官方主推的资源热更新的方案。

Addressables 的工作步骤

1 创建资源组

2 将资源添加进资源组

3 打包资源

4 加载资源

安装 Addressables

打开 Asset Package Manager

image-20230512134306330

切换为 Unity Register

image-20230512134358180

在左侧的列表找到 Addressables 点击安装按钮

image-20230512134515340

如何使用 Addressables

创建打包资源

我们分别创建 LocalRemote分别代表从本地和远程加载的资源目录,他们存放的资源如下。

image-20230512135200312

Local文件夹存放一个 Cube 的预制体,使用一个红色的材质。Remote文件夹存放一个 Sphere 的预制体,使用一个绿色的材质。

打包 Addressables 资源

打开 Addressables 资源组

image-20230512135505422

点击创建 Addressables Group Setting

image-20230512135726342

修改默认的分组名称为 Local,并将 Assets/Local/Cube的预制体拖入进去。

image-20230512141759338

image-20230512141833301

再新建一个 Remote 分组将 Assets/Remote/Sphere的预制体拖入进去

image-20230512141944775

进行打包资源

image-20230512142044461

会打包当前的平台的资源

使用 Addressables

本地打的包存储在 [项目路径]/Library/com.unity.addressables/aa/OSX/StandaloneOSX下面(macOS 平台)

本地加载

创建一个脚本 LoadAddressables.cs 用来加载我们打包出来的 Addressables

// 用来加载 Addressables 资源包
public class LoadAddressables : MonoBehaviour
{
}

1 引入 [UnityEngine.AddressableAssets] 命名空间

using UnityEngine.AddressableAssets;
通过 AssetRef 进行使用资源
// 通过引用打包的资源
public AssetReference localPrefab;

private void Awake()
{
    // 异步初始化资源
    Addressables.InstantiateAsync(localPrefab);
}

image-20230512144934623

使用资源的名称加载资源(热更新)
// 直接通过资源的名称加载资源
Addressables.InstantiateAsync("Assets/Local/Cube.prefab");

远程加载

远程打的包存放在 [项目目录]/ServerData/StandaloneOSX (macOS 平台)

Remote 文件夹的打包方式修改为远程方式

image-20230512145951135

我们重新进行打包,切换 Play Mode Script 模式为远程加载。

image-20230512150140972

修改加载为需要加载的远程资源的名称

Addressables.InstantiateAsync("Assets/Remote/Sphere.prefab");
搭建静态文件服务(caddy)

在当前项目目录创建文件 Caddyfile

# Caddyfile
:1010 {
	root ServerData/StandaloneOSX
	file_server browse
}

运行 Caddy run 启动服务

设置 Addressables 的监听端口为 1010

image-20230512170047147

image-20230512170155503

image-20230512170254398

此时我们 Remote 的远程配置已经发生了变更

image-20230512171139971

更新 Addressables

修改 Addressables 配置

image-20230512172727478

我们需要重新打一次包,是因为刚才没有选择这个,后面打更新包会报错

修改 Green 的物料颜色为蓝色,重新进行打包。

image-20230512172224275

选择我们本地生成 .bin文件

image-20230512172508144

再次运行就变成蓝色小球了

image-20230512173255738