赞
踩
本文主要针对不了解、未使用过Addressables系统的开发者,非如上情况可以不用往下看了。
按官网的介绍:
可寻址资产系统提供了一种按“地址”加载资产的简单方法。它通过简化内容包的创建和部署来处理资产管理开销。可寻址资产系统使用异步加载来支持从具有任何依赖项集合的任何位置加载。无论您是使用直接引用、传统资产组合还是文件夹进行资产管理,可寻址资产都提供了一种更简单的方法,使您的游戏更具动态性。
按个人理解,该系统可以提供Unity工程的资源管理功能(如预制体、纹理、材质、音频剪辑和动画等),可以理解成资源热更新的功能,这点类似于assetbundle,但是又比AB包更强大,不用手动编写编辑器扩展,不用自行进行版本管理,支持本地资源包和远程资源包。
官网给的优势:
构建游戏资产的传统方法使得高效加载内容变得具有挑战性。可寻址文件缩短了迭代周期,使您能够将更多时间用于设计、编码和测试应用程序。
-迭代时间:通过地址引用内容非常有效。对内容的优化不再需要更改代码。
-依赖关系管理:系统返回所请求内容的所有依赖关系,以便在将内容返回给您之前加载所有网格、着色器、动画等。
-内存管理:系统卸载资产并加载它们,自动计数引用并提供强大的探查器以帮助您发现潜在的内存问题。
-内容打包:由于系统映射并理解复杂的依赖关系链,因此即使在移动或重命名资产时,它也可以有效地打包捆绑包。您可以轻松地为本地和远程部署准备资产,以支持可下载的内容和减小的应用程序大小。
-配置文件:系统允许您创建一组字符串变量,这些变量使您能够更轻松地更改内容在捆绑包中的构建方式,而无需修改多个位置的设置。
本文主要是个人入门学习过程记录分享,所以较为基础,基于Unity3d 2019.4.22f1c1 和Addressables 1.16.19,若版本有差异可能会有问题。
也可以自行查看Addressables文档
该擦插件的安装需要使用Package Manager ,Window > Package Manager打开面板:
找到Addressables 点击Install:
等待下载安装完成即可:
因为Addressables的内容主要是工程中的资源,这里我们搭建一个简易的场景,将场景拖成预设,并将预设生成为Addressables资源,这样就完成了Addressables资源的准备工作。
简易的场景通过一个cube修改scale 当做地面,新建一个Sphere和一个Capsule组合形成一个“人形”的模型放在场景中,完成搭建:
并将资源拖成预设:
点击Window > Asset Management > Addressables > Groups:
首次没有设置文件需要添加设置:
点击 Create Addressables Settings,会多出来个Addressables Groups窗体:
在这个窗体内可以管理Addressables资源组,而且可以打包或者更新资源文件。
并且Assets文件夹下会多出AddressableAssetsData文件夹,其下面包含了Addressables资源的数据文件。
拖拽Assets/AddressableRes/SceneNode.prefab 文件至Addressables Groups窗体的Default Local Group组内:
并修改一下组名为“Local Test Group”,资源名为“SceneNode”:
接下来我们进行资源的打包,点击 Build > New Build > Default Build Script 进行打包:
等待打包完成,可以得到如下资源:
这些资源的路径为“工程目录\Library\com.unity.addressables\aa\Windows\StandaloneWindows64”,
这个目录会根据平台有差异,Tools > Profiles 打开配置界面:
这里有配置地址设置:
“localtestgroup_” 对应的就是“Local Test Group”只不过是大小写和空格差异的问题。
这个资源“localtestgroup_assets_all_5708b700e7bfe25e82f842fb5bfe3282.bundle”就是Local Test Group组的资源。
而“localtestgroup_unitybuiltinshaders_6ecf5d17db10826d17763857378e4887.bundle” 就是Unity的着色器资源包,会默认生成,如果没有可能显示不正常。
在之前我们制作的资源都是本地的资源,现在尝试编写代码将资源包加载并实例化在场景中。
这里有很多实现方式,这里选用Addressables.LoadAssetAsync函数加载:
static AsyncOperationHandle<TObject> LoadAssetAsync<TObject>(object key)
并添加完成委托,实例化到场景中。
代码很少,直接粘贴在这了:
using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.ResourceManagement.AsyncOperations; public class AALoaderTest : MonoBehaviour { GameObject scenenode = null; // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { if (Input.GetKeyUp(KeyCode.A)) LoadSceneNodes(); else if(Input.GetKeyUp(KeyCode.D)) DelSceneNodes(); } public void LoadSceneNodes() { if (scenenode == null) Addressables.LoadAssetAsync<GameObject>("SceneNode").Completed += OnLoaded; } void OnLoaded(AsyncOperationHandle<GameObject> obj) { if(obj.Result != null){ scenenode = Instantiate(obj.Result, Vector3.zero, Quaternion.identity); scenenode.transform.localPosition = Vector3.zero; scenenode.transform.SetParent(null); Debug.Log("场景加载完成!"); } } public void DelSceneNodes() { if(scenenode != null) Destroy(scenenode); Debug.Log("场景卸载完成!"); } }
需要的操作就是A键添加场景,D键删除场景。
最后的效果:
这里demo也免费分享一下:https://download.csdn.net/download/qq_33789001/85965635
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。