Unity Addressable

news/2025/2/14 7:57:16/

Unity重要目录

在这里插入图片描述

工程中的几个重要目录

Assets存放资源、代码、配置
Library大部分的资源导入到Assets目录之后,会转化成Unity认可的文件,转化后的文件会存储在这个目录
Logs日志文件
Packages第三方插件
ProjectSettings存放各种项目设定
UserSettings用户偏好设置,如编辑器的布局方式

当你要迁移一个工程,或者将工程复制给别人的时候,只需要将Assets、Packages以及ProjectSettings三个目录备份即可

Addressable

Addressable 是基于 Asset Bundle 的可寻址资源管理系统
优点:

  1. 自动化管理AB包打包、发布、加载
  2. 可以更方便的进行本地、远程资源的加载
  3. 分析资源关联性
  4. 内存管理更方便

资源分组

通过 Package Manager 安装 Addressable,然后点击 Groups
在这里插入图片描述
初次使用需要创建 Addressables Settings,创建后会在 Assets 目录下创建一个 AddressableAssetsData 文件夹保存相关配置
在这里插入图片描述
这些配置都使用了ScriptableObject

Addressables Groups 界面用于资源规划,空白处右键可以创建不同的 Group
在这里插入图片描述
在这里插入图片描述
每创建一个新的Group默认会生成对应的配置文件,记录打包和加载的设置,打包的时候一个Group会打成一个或多个AB包

直接把资源拖入某个Group,它就变成一个可寻址资源
在这里插入图片描述
也可以在 Inspector 中勾选 Addressable
在这里插入图片描述
默认会使用路径作为 Addressable Name(或者称为Address),也就是资源的唯一标识符,也可以手动修改
在这里插入图片描述

注意:

  1. C#代码无法作为可寻址资源
  2. Resources文件夹下资源如果变为可寻址资源,会移入Resources_ moved文件夹中
    原因: Resources文件夹下资源会最终打包出去,如果变为可寻址资源意味着想通过Addressables进行管理
    那么它就没有必要通过Resources方式去加载和打包,所以会自动迁移,避免重复打包

右边的 Labels 对资源添加标签,比如低清版,高清版,关卡1,关卡2,之后就可以只加载某个标签的资源

点击资源右键选项
在这里插入图片描述

Move Addressables to Group将资源移动到指定的Group
Move Addressables to New Group使用与当前Group相同的设置创建一 个新的Group,将资源移动到这个Group
Rmove Addressables移除资源,变为不可寻址
Simplify Addressable Names简化可寻址资源名,会删除名称中的路径和扩展名,简化缩短名称
Copy Address to Clipboard将地址复制到剪贴板
Change Address改名
Create New Group创建新的Group

点击分组右键选项
在这里插入图片描述

Remove Group(s)移除组,组中所有资源恢复为不可寻址资源
Simplify Addressable Names简化名称
Rmove Addressables移除资源,变为不可寻址
Set as Default设置为默认组,当直接勾选资源中的Addressable时,会自动加入该组
Inspect Group Setting快速选中关联的组相关配置文件
Rename重命名
Create New Group创建新组

Profile 配置概述相关

在这里插入图片描述
在这里插入图片描述
Manage Profiles: 管理配置文件
配置打包平台、本地和远程的打包,加载路径信息

Tools工具相关

在这里插入图片描述

Inspect System Settings检查系统设置
Check for content Update Restrictions检查内容更新限制
Window打开Addressables相关窗口
Groups ViewShow Sprite and Subobject Addressable: 显示可寻址对象的精灵和子对象,一般想要 看到图集资源内内容时可以勾选该选项
Group Hierarchy with Dashes: 带破折号的组层次结构

Play Mode Script 编辑模式下如何加载资源

在这里插入图片描述

Use Asset Database (fastest)使用AssetDatabase相关接口直接加载资源,不会打ab包,开发阶段用
Simulate Groups (advanced)测试阶段使用,不会打ab包,代码中加入了时间延迟,模拟下载的情况
Use Existing Build发布阶段使用,需要打ab包,配置远端下载路径

Build (构建打包相关)

在这里插入图片描述

New Build构建资源(相当于打包资源分组) ,提供了一个默认的打包脚本
Update a Previour Build更新以前的版本
Clean Build清空之前的构建资源

加载资源

通过资源标识类加载

using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;public class Test : MonoBehaviour
{//通用资源标识类可以用来加载任意类型资源public AssetReference assetReference;//只能加载图集资源public AssetReferenceAtlasedSprite asReference;//只能加载prefab资源public AssetReferenceGameObject prefabReference;//加载精灵图片或图集中的某个图片public AssetReferenceSprite spriteReference;//只能加载贴图资源public AssetReferenceTexture textureReference;//指定资源类型public AssetReferenceT<AudioClip> audioReference;public AssetReferenceT <RuntimeAnimatorController> controller;public AssetReferenceT<TextAsset> textReference;private void Start(){AsyncOperationHandle<GameObject> handle = assetReference.LoadAssetAsync<GameObject>();handle.Completed += OnLoadCompleted;}private void OnLoadCompleted(AsyncOperationHandle<GameObject> handle){if (handle.Status == AsyncOperationStatus.Succeeded){//handle.Result就是加载的对象GameObject go = Instantiate(handle.Result);}}
}

在这里插入图片描述
点击右侧的圆圈选择指定的资源,拖动非可寻址资源上去会添加到默认的Group中

通过AddressableName加载卸载

Addressable加载相关的API都是异步的,同步方法已被废弃
异步加载和卸载,资源可以在本地也可以在远端服务器

private AsyncOperationHandle<GameObject> _asyncOperationRes;
private AsyncOperationHandle<GameObject> _asyncOperationInst;private void Load()
{//加载资源Addressables.LoadAssetAsync<GameObject>("AddressableName").Completed += (handle) =>{if (handle.Status == AsyncOperationStatus.Succeeded){_asyncOperationRes = handle;// 加载实例Addressables.InstantiateAsync(handle.Result).Completed += (inst) =>{_asyncOperationInst = inst;};}};
}private void Unload()
{// 释放实例Addressables.ReleaseInstance(_asyncOperationInst);// 释放资源Addressables.Release(_asyncOperationRes);
}

加载卸载场景

using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.ResourceManagement.ResourceProviders;
using UnityEngine.SceneManagement;public class Test2 : MonoBehaviour
{SceneInstance _loadedScene;//场景句柄public void LoadSceneAsync(){Addressables.LoadSceneAsync("SceneName", LoadSceneMode.Additive).Completed += (handle) =>{if (handle.Status == AsyncOperationStatus.Succeeded){_loadedScene = handle.Result;//do something}};}public void UnloadSceneAsync(){Addressables.UnloadSceneAsync(_loadedScene).Completed += (handle) =>{if (handle.Status == AsyncOperationStatus.Succeeded){_loadedScene = new SceneInstance();//do something}};}
}

分析资源

在这里插入图片描述
分析窗口帮助我们分析项目中的资源冗余情况,这里分为可修复规则(Fixable Rules)和不可修改规则(Unfixable Rules),点击某个规则,然后点击Analyze Selected Rules就会进行分析。对于可修复规则,比如A引用C,B也引用C,点击Fix Selected Rules就会创建一个新的Group,把C放进去。

参考

Unity进阶之Addressable


http://www.ppmy.cn/news/991941.html

相关文章

【案例】--GPT衍生应用案例

目录 一、前言二、GPT实现智能问答架构2.1、基本的GPT实现智能问答架构2.2、可应用的GPT实现智能问答架构1、语义转换2、相似度关键字矩阵3、ES中搜索相似度关键字矩阵三、后续一、前言 GPT,全称Generative Pre-trained Transformer ,中文名可译作生成式预训练Transformer。…

71. ElasticSearch 5.0.0 安装部署常见错误或问题

文章目录 ElasticSearch 5.0.0 安装部署常见错误或问题问题一&#xff1a;UnsupportedOperationException问题二&#xff1a;ERROR: bootstrap checks failed问题三&#xff1a;max number of threads [1024] for user [es] likely too low, increase to at least [2048]问题四…

【HarmonyOS】API6使用storage实现轻量级数据存储

写在前面 本篇内容基于API6 JS语言进行开发&#xff0c;通过结合轻量级数据存储开发指导的文档&#xff0c;帮助大家完成一个实际的代码案例&#xff0c;通过这个小案例&#xff0c;可以实现简单数据的存储。 参考文档&#xff1a;文档中心 1、页面布局 首先我们编写一个简单…

(202307)wonderful-sql:复杂一点的查询(task3)

教程链接&#xff1a;Datawhale - 一个热爱学习的社区 知识学习 1 视图 视图是一张虚拟的表。《sql基础教程第2版》用一句话非常凝练的概括了视图与表的区别---“是否保存了实际的数据”。 通过定义视图可以将频繁使用的SELECT语句保存以提高效率。通过定义视图可以使用户看…

基于形态学的方法来实现指纹细节的快速细化算法:Python实现及优化策略

尊敬的读者们,大家好,我在这篇文章中将会和大家分享我所探索的一种用于确定指纹细节的快速细化算法。我相信这将对有相同需求的人带来一些启示,同时,我也希望听取大家对我的方法的反馈和建议,帮助我持续改进和优化这个算法。 一、背景与动机 在数字图像处理领域,特别是…

《MySQL 实战 45 讲》课程学习笔记(二)

日志系统&#xff1a;一条 SQL 更新语句是如何执行的&#xff1f; 与查询流程不一样的是&#xff0c;更新流程还涉及两个重要的日志模块&#xff1a;redo log&#xff08;重做日志&#xff09;和 binlog&#xff08;归档日志&#xff09;。 重要的日志模块&#xff1a;redo l…

RabbitMQ 教程 | 第3章 客户端开发向导

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…

数据分析基础-Excel图表的美化操作(按照教程一步步操作)

一、原始数据 包含月份和对应的销量和产量。 时间销量产量1月60722月38673月28344月58685月67596月72357月61428月24319月556710月243511月122112月2645 二、原始的图表设计-采用Excel自带模板 三、优化思路 1、删除多余元素 2、弱化次要元素 对于可以弱化的元素&#xff0c…