首页 > 其他分享 >Unity Addressable资源管理方案实战详解

Unity Addressable资源管理方案实战详解

时间:2023-10-26 14:57:12浏览次数:25  
标签:bundle Unity Addressable 分组 资源管理 资源 加载

Unity 推出了全新的Addressable的资源管理方案, 全网一夜间觉得不用Addressable感觉自己的资源管理方案会低一个档次,本节我们将详细的分析Addressable资源管理系统。本节主要从以下3个点来进行分析:

(1) Addressable的本质是什么?AssetsBundle是否过时了?

(2) Assetsbundle使用实战详解;

(3) 如何搭建一个资源更新服务器;

 

 

Addressable的本质, AssetsBundle是否过时了?

 

先正面回答这个问题,AssetsBundle是Unity的资源管理机制,将资源打包到AssetsBundle资源包并提供接口能从ab包里面加载资源出来。有了这个机制以后,我们要做资源管理,还需要做:

  a: 根据项目需求,编写编辑器扩展,提供指定资源打入对应bundle包工具策略;

  b: 根据项目的需求,资源包的依赖,提供ab包资源加载与释放的策略;

  c: 根据项目版本管理,更新需求,提供ab包的更新与增量下载策略;

  d: 项目资源加密的策略;

 

上面出现了两个频繁的词汇”机制,策略”, 机制提供的功能給上层使用,策略是基于机制,来实现具体怎么用。AssetsBundle 属于底层的资源加载与管理的机制。而我们框架中做的编辑器扩展,资源管理是基于机制的使用策略

 

Unity引擎考虑到上面a, b, c, d等策略对普通开发者实现有难度,于是帮我们实现了Addressable,它基于AssetsBundle机制, 实现的上述a, b, c, d等功能的一整套资源管理策略。没有错,Addressable是基于AssetsBundle的

 

AssetsBundle 是机制,Addressable是具体实现的一种资源管理的策略,AssetsBundle做资源管理并没有过时。Addressable是一种资源管理策略,如果策略不满足你项目的需求,你也可以用原来自己开发的基于AssetsBundle的资源管理策略而不用Addressable。比如你对加密有自己特殊的要求,比如你觉得Addressable还没有之前项目扩展的资源管理策略符合项目需求,你就可以不使用Addressable。

 

 

Addressable使用实战详解

 

AssetsBundle我们称ab, Addressable我们称aa。Addressable作为一种资源管理的策略,并不是Unity的核心机制,所以Addressable是作为一个Package来进行安装的,不是自带在引擎内部默认就有的。接下来我们按照来介绍Addressable的使用,了解它提供的策略我们如何使用,简化我们的资源管理模块的开发。

 

1: Addressable开发环境安装

创建一个Unity项目,打开Unity Package Manager菜单(Window/Package Manager),如图: 

 

 

 

 

其中.CN的实现了资源加密策略,不带.CN的没有实现资源加密策略。安装完成后,你的项目就支持了Addressable了。打开菜单Windows/AssetManager/Addressable, 可以看到Addressable的编辑器扩展部分的工具等。

 

 

 

2: 创建资源管理的Groups与项目资源管理配置文件

我们的资源哪些资源要导入到那个ab包这些,Addressbale要提供好用的工具給开发者,ab包是基于tag的,然后指定每个资源属于哪个tag,就会打入进去,Addressable有一个分组Group的概念,你要把哪些资源打入到哪个分组,而分组下的资源就会被到到一个bundle包里面。而这些Group分组数据等需要统一管理,所以安装好Addressable后,我们就要创建出来我们的资源分组管理与相关数据称Groups。创建很容易,点击菜单Windows/Asset Manager/Addressable/Groups就可以创建出来我们的Group分组的配置数据与分组可视化管理工具。

 

 

3: 制作游戏资源

 

  Addressable安装到你的项目并创建出来分组管理数据与工具后,你就可以使用它来管理你的资源了。资源的制作,就和我们普通的一样,做预制体的做预制体,做动画的做动画等。使用方式没有任何的区别,一般我们做游戏会按照用途来进行分类:

GUI: 放UI相关的资源与预制体;

Maps: 放关卡地图相关资源与预制体;

Charactors: 放游戏角色等相关的资源与预制体;

Sounds:放游戏音乐与音效;

Effects: 游戏的特效;

4: 创建分组

制作好资源以后,接下来就根据资源来进行分组打包,一般实际项目中会根据功能来,比如地图Map会导入到Map Group中。于是我们要先创建分组。打开分组可视化视图”Addressable Groups”: 点击Create 的tab, 选Group/Packed Asset, 这个时候系统就为你创建出来了一个分组,你可以rename修改名字。我项目一般按照资源的目录结构创建同名分组。这里创建了Charactors与Map两个分组。如图:

 

 

 

细心的同学发现了Resources 在Build In Data里面,系统内部把原来的Resources应该也当作了特殊的bundle资源包。

 

5:将资源指定到对应的分组

 

  分组创建好后,我们就把资源指定到对应的分组,这样同一个分组的资源就被打包到同一个bundle里面。如上图所示,我分别把资源都拖入到了对应的分组。接下来切回到资源,勾选上资源的Addressable选项,资源所在bundle包中的路径就出来了,如图:

 

 

 

 

我们从bundle包里加载资源的时候,就可以通过这个路径,一般不用去改它。

 

6: 每个Group的配置文件

当我们创建出一个Group后,在AddressableAssetsData文件夹下就会创建出这个分组对应的配置文件,名字与Group的名字相同,我们可以通过修改配置文件里面的配置来对Group进行设置。如图:

 

 

 

 

这里几个重要的配置选项我把它列举出来:

Build Path: 这个bundle资源包打包出来后是否要放入包体内部,还是要放远程服务器。RemoteBuildPath,不会被放入到安装包内部, LocalBuildPath, 放入到安装包内部。

Load Path: 去哪里加载这个bundle包,加载这个bundle包对应的url地址。可选项有LoaclLoadPath, RemoteLocalPath。是本地加载还是远程加载。

Path Prevview: 你配置完选项以后,对应的具体的path是哪里显示出来,方便我们去对应的目录查找。

如果是Build到Local,我们可以在项目的Library/com.unity.addressables/aa/Windows/StandaloneWindows64/charactors_assets_all_f70ab74dc9e5f9cc8d80cffcecdf6d1e.bundle。

如果是Build到Remote,我们可以在项目ServerData/StandaloneWindows64/map_assets_all_51ff4626a6a125ba0ce828af846f08ef.bundle

你会发现其实最后打包以后就是bundle

 

7: 打包bundle

分组指定与配置好以后,接下来我们就是要打包生成bundle包了,这个很简单,只要打开AddressableGroups视图如图: 

.

 

 

选择Build/New Build/Default Build Script。这样就可以打包所有的bundle包,在对应的目录就能看到了。

 

8: 资源的运行模式

  每次修改了资源以后,我们都要来打bundle包,这样操作会比较麻烦, 于是Addressable提供了几个运行模式,如图

 

 

 

Use Asset Database: 使用Editor模式下的AssetDatabase,来模拟加载资源,这样速度最快。开发中就不用每次都去build bundle包。

Simulate Groups: 模拟真实的ab包模式下的运行。

Using Existing Build: 从打包出来的ab包中加载资源运行。

开发中我们可以直接使用Asset Database即可,开发完成打包的时候可以使用模拟与真实模式来开发。

 

9: 加载/卸载 bundle包中的资源

  Addressable不用你去关资源到底在哪个bundle包,你只要传入资源路径就可以了,它会更具资源的路径自动去加载对应的bundle包。对于使用者而言就非常方便了。代码如下:

 

 

 

 

 

 

 

不用异步,也可以用await来等。卸载资源使用Addressable.Release(资源对象),即可。

 

10: 远程部署,指定部署的远程服务器

我们要做热更新的时候需要指定远程的服务器,这样只要把ServerData放到资源服务器上就可以了。Addressable自己会做好资源比对,增量更新等开发者不用管我们只要配置好远程服务器,然后告诉Addressable就可以了。打开Addressable的设置,Windows/Asset Manager/Addressable/Settings

 

配置好你的资源服务器地址就可以了, 到此Addressable的基本使用与理念基本介绍完成。

 

 

如何搭建一个资源更新服务器

 

  测试服务器Unity工具都提供了,或者自己搭建一个http server,在正式项目中,我们要做资源服务器需要考虑资源的下载速度,大量玩家一起涌入以后如果能保证资源能很快的加载,这里我们一般都使用CDN来加速。目前主流的云服务方案提供商都有CDN的服务,你只要把你的资源上传到云,它会給你生成一个资源加载地址,你把这个地址配置到你项目中就可以了。CDN是按流量收费的。

 

标签:bundle,Unity,Addressable,分组,资源管理,资源,加载
From: https://www.cnblogs.com/rainy1unity/p/17789405.html

相关文章

  • 在使用 Unity 2022 打包安卓项目时,遇到 gradle 无法访问或下载超级慢最终超时出错的问
    一般表现是打包最后一步会等待超长时间,最后报错,错误信息:PickedupJAVA_TOOL_OPTIONS:-Dfile.encoding=UTF-8FAILURE:Buildfailedwithanexception.*Whatwentwrong:Aproblemoccurredconfiguringrootproject'Gradle'.>Couldnotresolveallartifactsfor......
  • Unity Shader入门
    ShaderLab首先我们创建一个URP工程,然后复制这个地址里的shader。Unity中的shader以ShaderLab的格式编写。下面是上面地址复制的ShaderObject//ShaderLab代码以Shader声明开始。这个路径决定了Material面板中UnityShader的名字和位置。Shader.Find也会使用这个路径Shader"......
  • 在Houdini中创建布料,并导入到Unity中
    在Houdini中创建一个具有物理效果和贴图的布料,导入到Unity中,实现一个效果良好的、可以与模型互动、有贴图的静态布料模型。参考视频:Houdini+Unity2021制作布料全流程!_哔哩哔哩_bilibili1、创建节点首先创建一个obj文件:随后右键这个节点,创建一个DigitalAssret。进入Typ......
  • Unity DOTS系列之BlobAsset核心机制分析
     最近DOTS发布了正式的版本,我们来分享一下DOTS里面BlobAsset机制,方便大家上手学习掌握UnityDOTS开发。BlobAsset概叙DOTS提供了BlobAsset机制来把数据生成高效的二进制数据。BlobAsset的数据是不可变的。BlobAsset只支持非托管类型数据。支持Burst编译器编译出来的类型。同......
  • Unity游戏排行榜的制作与优化
    游戏排行榜是一个很重要的功能,在弱联网的单机游戏与网络游戏中排行榜都是非常重要的,今天我们来详细的讲解游戏排行榜的制作方案,主要有4个点:  游戏排行榜排序核心算法的实现 排序在游戏开发中是一种十分重要的算法,特别是对于海量的数据,高效的排序算法,是核心与关键,排行......
  • Unity DOTS系列之Filter Baking Output与Prefab In Baking核心分析
     最近DOTS发布了正式的版本,我们来分享一下DOTS里面Baking核心机制,方便大家上手学习掌握UnityDOTS开发。今天给大家分享的Baking机制中的FilterBakingOutput与PrefabInBaking。FilterBakingOutput机制在默认情况下,Baking会为每个GameObject生成的Entity与Component,......
  • Unity 3D定点数物理引擎实战系列
    1.1 BEPUphysicsint3D定点数物理引擎介绍 帧同步的游戏中如果用物理引擎,为了保证不同设备上的结果一致,需要采用定点数来计算迭代游戏过程中的物理运算。也就是我们通常说的定点数物理引擎(确定性物理引擎)。本系列教程给大家详细的讲解如何在你的项目中内置一个确定性物理引......
  • Unity 3D定点数物理引擎实战系列2
    1.2 BEPUphysicsint定点数3D物理引擎使用上一节給大家介绍了BEPUphysicsint的一些基本的情况,这节课我们来介绍它的基本使用,本节主要从以下5个方面来介绍:(1) 创建一个物理世界Space,并开启模拟迭代;(2) 添加一个物理物体Entity到世界;(3) 物理引擎的基本处理与操作使用;(......
  • Unity ILRuntime 实战教程系列
    1.1 Unity 搭建ILRuntime开发环境 Unity热更新目前主流的方案有; Lua, ILRuntime, puerts, huatuo方案。前两个大家都比较熟悉了,puerts是基于TypeScript开发的热更新,huatuo是基于C#的方案。后两个大家会比较陌生。本系列分享基于ILRuntime来做热更新。 ILRuntime热更......
  • Unity中GameObject对象的方法Find,FindGameObjectsWithTag等API的使用方法
    Unity中GameObject对象的方法Find,FindGameObjectsWithTag等API的使用方法.Find(stringname):.FindGameObjectsWithTag(stringtag):.FindGameObjectWithTag(stringtag):.FindWithTag(stringtag):在Unity中,GameObject类具有一些用于查找和操作游戏对象的方法。.Find(stringna......