Unity资源打包Addressable AA包

devtools/2024/11/16 0:24:09/

从零到一

很多资料都是通过一步步设置讲解的,有时很想先快速实现,再了解细节。

下面就是远程加载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

这个配置文件中指定了远程服务器下载路径,及资源的名称

通过收搜索资源名称可以发现,资源被缓存到系统路径中去了。

这个资源也可以指定到程序路径下,远程文件服务器的地址应该也可以通过代码进行修改。


http://www.ppmy.cn/devtools/134292.html

相关文章

编写一个脚本实现参数的远程主机网络探测python test_ip.py 192.168.0.10~192.168.0.100(sys模块)

""" 编写一个脚本实现参数的远程主机网络探测python test_ip.py 192.168.0.10~192.168.0.100 """ #导入模块 #读取起始IP&#xff0c;结束IP import sys start_ip sys.argv[1] end_ip sys.argv[2] # print(start_ip,end_ip)##########组装数据…

docker安装redis

1、拉取镜像 docker pull redis:latest运行之前需要再/data/redis创建redis.conf配置文件 内容如下 # bind 192.168.1.100 10.0.0.1 # bind 127.0.0.1 ::1 #bind 127.0.0.1protected-mode noport 6379tcp-backlog 511requirepass roottimeout 0tcp-keepalive 300daemonize no…

【学习记录丨UVM】2.1uvm_component 与uvm_object

UVM中常用类的继承关系 1.uvm_component派生自uvm_object 上图展示了UVM中常用类的继承关系&#xff0c;可以看到&#xff1a; &#xff08;一&#xff09; uvm_conponent是继承自uvm_object的。这说明了uvm_component继承了object的特性&#xff0c;又同时有自己的特别属性&a…

vue3入门知识(二)

computed 计算属性是有缓存的&#xff0c;方法没有缓存 计算属性得到的数据是一个ref定义的响应式数据 <template><div class"person">姓&#xff1a;<input type"text" v-model"firstName"><br>名&#xff1a;<i…

数据仓库面试题集离线实时

一、Flink面试问题集 1、flinkkafka 如何保证精准一次 配置两阶段提交 2、Flink提交方式&#xff0c; 使用pre-job还是yarn-session模式&#xff0c;以及Application模式&#xff0c;好处&#xff1f; Flink提交模式模式对比 3、Flink UV统计实现 set布隆过滤器redis 有误…

云时代基础设施模型:可变与不可变之析

在基础设施管理的领域中&#xff0c;存在两种起着主导作用的方法&#xff0c;也就是可变基础设施与不可变基础设施。它们决定着资源的部署以及维护的模式&#xff0c;对更新的实施途径、基础设施的演进方向&#xff0c;还有不同环境之间的一致性保障起着关键的作用。 可变基础设…

比ChatGPT更酷的AI工具

相较于寻找比ChatGPT更酷的AI工具&#xff0c;这听起来似乎是个挑战&#xff0c;因为ChatGPT已经以它强大的综合性能在AI界大名鼎鼎。然而&#xff0c;每个工具都有其独特的优势&#xff0c;特别是在特定的应用场景下&#xff0c;其他AI工具可能会展现出与ChatGPT不同的魅力。接…

计算机视觉 ---常见图像文件格式及其特点

常见的图像文件格式及其特点如下&#xff1a; JPEG&#xff08;Joint Photographic Experts Group&#xff09; 特点&#xff1a; 有损压缩&#xff1a;通过丢弃一些图像数据来实现高压缩比&#xff0c;能显著减小文件大小&#xff0c;适合用于存储照片等色彩丰富的图像。但过…