从零到一
很多资料都是通过一步步设置讲解的,有时很想先快速实现,再了解细节。
下面就是远程加载Cube.prefab然后实例化简单的代码。
代码中可以不需要远程的网址,不需要资源下载的位置,不需要判断是否已经下载到本地。
那是如何从远程服务器下载资源,又是怎么加载的。
using UnityEngine;
using UnityEngine.AddressableAssets;
public class Load : MonoBehaviour
{private GameObject cubeObj;private UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle<GameObject> handle;void Start(){// 加载资源handle = Addressables.LoadAssetAsync<GameObject>("Assets/Prefab/Cube.prefab");handle.Completed += (obj) =>{// 实例化cubeObj = Instantiate(obj.Result,transform);};}// 释放资源public void Release_Resource(){if (null != cubeObj)Destroy(cubeObj);Addressables.Release(handle);}
}
Addressable工具是一个插件包
Unity 2023.1.0f1c1版本中导入插件包
Windows > Package Manager > Packages:Unity Registry > 搜索 Addressable > Install
Addressable工具包需要初始化
Window > Asset Management > Addressables > Groups > Create Addressables Settings
Addressable初始化创建了一个文件夹
文件夹中包含配置文件,资源的管理配置都在这里,所以代码加载数据时,代码量很少
创建一个Cube Prefab用于加载测试
场景中创建一个Cube拖入到Assets > Prefab文件夹中(文件夹名称随意但是要和代码中的路径一致)
挂载脚本
删除场景中的Cube创建一个空物体用于挂在上面的脚本,脚本中加载Cube后实例化的位置是挂载脚本的GameObject的位置,所以把空物体放在相机正前方。
需要注意的是Addressables.LoadAssetAsync<GameObject>("Assets/Prefab/Cube.prefab");中的路径一定是刚刚Cube Prefab存放的路径
万事俱备只欠东风
如何配置Addressable工具
本地加载
1.预制体分组
当资源多的时候需要将资源分成一组一组,Addressable中的Group
选择Cube的Prefab,在属性面板中勾选Addressable (还有一种拖拽的方式)
此刻Prefab有两个信息
1.资源的路径是Assets/Prefab/Cube.prefab(代码中加载的路径)
2.资源被分到默认组 Default Local Group (以后再说怎么分组)
2.Addressable工具打包
还记得Addressable的配置文件吗
Assets > AddressableAssetsData > AddressableAssetSettings
点击Manage Groups打开管理面板
Build > New Build > Default Build Script
3.运行
此时已经可以加载Cube了
4.疑惑及解决疑惑
程序是运行了,预制体也加载了,可是预制体的资源文件在哪里?
预制体在Addressable工具build的时候会存放在下面路径下
F:\UnityProject\AA\Library\com.unity.addressables\aa\Windows\StandaloneWindows64
打包成windows程序后
会保存在StreamingAssets文件夹中
F:\UnityProject\AA\win\AA_Data\StreamingAssets\aa\StandaloneWindows64
远程加载
先预想一下远程加载的步骤
1.资源打包
2.将打包好的资源存放在远程服务器上
3.程序运行在远程服务器上下载资源,加载资源
4.程序再次运行,先对比远程资源
如果一样,直接加载本地资源
如果不一样,在远程服务器上下载资源,加载资源
1.资源打包
在上面加载的代码中没有发现有添加远程服务器的代码,是因为远程服务器的代码在资源打包的时候就已经配置好了。
这里有一个小插曲,就是如何模拟一个远程服务器。(Unity也可以模拟但这里用另一个方法)
搜索HFS.exe这个工具,将打算存放资源的文件夹拖到根节点上即可,可以自定义端口。
通过网址你可以检验一下资源服务器是否生效
1.配置资源打包的本地地址和远程地址
配置文件AddressableAssetSttings > Manage Profiles
Remote 远程 选择 Custom 自定义
Remote.BuildPath ServerData/[BuildTarget] (资源打包到本地的位置)
Remote.LoadPath http://172.18.216.168:6565/HFS/ (将来程序加载资源的网址)
2.选择以远程打包模式
Build Remote Catalog
3.选择哪些分组要打包成远程资源
刚刚Cube Prefab放在Default分组下,将Default分组设置成远程打包的模式
4.打包资源
注意:自己模拟的文件服务器需要做如下设置
Project Setting > Player > Allow downloads over HTTP* 选择 Always Allowed
5.打包程序运行
将程序打包,运行程序,此时发现场景中什么都没有
因为还需要一个步骤
将F:\UnityProject\AA\ServerData\StandaloneWindows64中的内容复制到模拟远程服务器的文件夹中F:\language\HFS
再次运行程序,Cube被加载出来了
6.加载的资源在哪里
程序运行后我们发现StreamingAssets文件夹中没有资源,那资源被下载到哪里?
我们可以查看一下F:\UnityProject\AA\win\AA_Data\StreamingAssets\aa中catalog.json
这个配置文件中指定了远程服务器下载路径,及资源的名称
通过收搜索资源名称可以发现,资源被缓存到系统路径中去了。
这个资源也可以指定到程序路径下,远程文件服务器的地址应该也可以通过代码进行修改。