Unity Addressable System 本地服务器功能验证
1.从Package Manger里安装Addressable
注意这里有Addressables和Addressables两个包,前者是核心框架,处理跨平台通用逻辑,比如用 地址(Address)来异步加载、卸载资源;自动做引用计数,避免资源泄漏;支持远程加载(CDN)、本地缓存、分包更新等。后者是子模块,告诉核心框架在 Android 上该怎么干,比如如何从APK的Asset/aa目录读取资源,如何从 OBB 或 AAB 的分包里加载资源;Android 平台的路径解析、IO 优化等。
2.进入Addressable Groups界面
默认只有一个Default Local Group分组,可以将要寻址的资源拖入,比如预制体,材质,精灵贴图,场景等。可修改资源名称。Path是资源路径,Labels是标签。比如同一张贴图可以有两张分辨率不同的贴图。如下
3.创建示例场景
使用官方示例工程,打开BasicReference场景。Addressables-Sample/Basic /Basic AssetReference
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement;public class BasicReference : MonoBehaviour
{public AssetReference baseCube;public void SpawnThing(){baseCube.InstantiateAsync();}
}
4.设置打包平台
新建两个Build Profile, Windows和Android, Allow download over HTTP*都设置为如下。保证能访问你本地的服务器。编辑器下验证Addressable功能时,注意Switch Profile切换为Windows, 如果当前仍为Android平台,那么编辑器下运行会丢失材质。
5.设置打包路径和加载路径
由于我们要模拟远程加载资源包,所以这里直接设置成Remote. 默认会给你一个ServerData文件夹,和Assets文件夹同目录,由于这里的开发平台是Windows,所以是StandaloneWindow64.当你切换到安卓平台,这里自动变为Android。
点击Manage Profiles打开Addressables Profiles面板。当前使用的是Default分组,实际只用中可以新建多个分组,比如开发组和发布组。远程加载路径为本机IP加端口号8000, 本机地址可在控制台下ipconfig查看
5.打包资源
直接打包,由于我设置的是Android环境,所以会在ServerData目录下生成Android文件夹。
6.在本地启动一个静态服务器
我使用的是node.js + http-server。在控制台输入npm install -g http-server,安装http-server模块。完成之后到ServerData目录,控制台输入http-server -p 8000 --cors --no-cache
7.手机上测试Addressable
保持安卓手机和电脑同一个局域网,测试正常。(卸载App, 将ServerData目录下的Android文件夹剪切到别处,再安装Apk, 运行,发现无法正常加载资源并报错。将Android文件夹移回,运行App,正常)。