找回密码
 立即注册
查看: 197|回复: 0

Unity资源打点系列 Unity Addressable资源打点实战

[复制链接]
发表于 2024-7-15 18:00 | 显示全部楼层 |阅读模式
前言

Unity 推出了全新的Addressable的资源打点方案, 全网一夜间感觉不用Addressable感觉本身的资源打点方案会低一个档次,本节我们将详细的分析Addressable资源打点系统。本节主要从以下3个点来进行分析:
对惹,这里有一个游戏开发交流小组,但愿大师可以点击进来一起交流一下开发经验呀
(1) Addressable的本质是什么?AssetsBundle是否过时了?
(2) Assetsbundle使用实战详解;
(3) 如何搭建一个资源更新处事器;
Addressable的本质, AssetsBundle是否过时了?


上面呈现了两个频繁的词汇”机制,策略”, 机制提供的功能給上层使用,策略是基于机制,来实现具体怎么用。AssetsBundle 属于底层的资源加载与打点的机制。而我们框架中做的编纂器扩展,资源打点是基于机制的使用策略
Unity引擎考虑到上面a, b, c, d等策略对普通开发者实现有难度,于是帮我们实现了Addressable,它基于AssetsBundle机制, 实现的上述a, b, c, d等功能的一整套资源打点策略。没有错,Addressable是基于AssetsBundle的
AssetsBundle 是机制,Addressable是具体实现的一种资源打点的策略,AssetsBundle做资源打点并没有过时。Addressable是一种资源打点策略,如果策略不满足你项目的需求,你也可以用本来本身开发的基于AssetsBundle的资源打点策略而不用Addressable。比如你对加密有本身特殊的要求,比如你感觉Addressable还没有之前项目扩展的资源打点策略符合项目需求,你就可以不使用Addressable。
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分组的配置数据与分组可视化打点东西。


Addressable分组配置数据


Addressable分组打点东西
3: 制作游戏资源


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_51ff4626a6a125ba0ce828af846f08  ef.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包。对于使用者而言就非常便利了。代码如下:
  1. using UnityEngine.AddressableAssets;
  2. Addressables.LoadAssetAsync<GameObject>(”Assets/AssetsPackage/Maps/Map1.prefab”).Completed += (handle) =>
  3. {
  4. // 预制体
  5. GameObject prefabObj = handle.Result;
  6. // 实例化
  7. GameObject cubeObj = Instantiate(prefabObj);
  8. };
复制代码
不用异步,也可以用await来等。卸载资源使用Addressable.Release(资源对象),即可。


10: 长途部署,指定部署的长途处事器
我们要做热更新的时候需要指定长途的处事器,这样只要把ServerData放到资源处事器上就可以了。Addressable本身会做好资源比对,增量更新等开发者不用管我们只要配置好长途处事器,然后告诉Addressable就可以了。打开Addressable的设置,Windows/Asset Manager/Addressable/Settings


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

如何搭建一个资源更新处事器
测试处事器Unity东西都提供了,或者本身搭建一个http server,在正式项目中,我们要做资源处事器需要考虑资源的下载速度,大量玩家一起涌入以后如果能保证资源能很快的加载,这里我们一般都使用CDN来加速。目前主流的云处事方案提供商都有CDN的解决方案,你只要把你的资源上传到云,它会給你生成一个资源加载地址,你把这个地址配置到你项目中就可以了。CDN是按流量收费的。
附:视频教学

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-12-22 10:44 , Processed in 0.202790 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表