首页 > Unity3D资源异步加载(三)——Addressables资源异步加载-Unity

教程|Unity2018新功能技术训练视频教程,Unity3D资源异步加载(三)——Addressables资源异步加载-Unity

互联网 2021-02-27 11:17:42

本篇介绍Addressables资源加载,也是基于AssetBundle之上分装,Addressables是在Unity2018版本以后出的,直接可以在Window-->Package Manager里找到Addressables,目前已经到了1.7.5版本。Unity3D资源异步加载(三)——Addressables资源异步加载

安装完成后,工程中的资源都会出现Addressable可选项Unity3D资源异步加载(三)——Addressables资源异步加载安装完成后进入window->Asset Management->Addressable->GroupsUnity3D资源异步加载(三)——Addressables资源异步加载

资源可以进行分组,进入后1处是默认的Group组Create->Group->Package Assets可以创建Group组Profile:设置自己资源打包的地址,并选择你设置的位置,进入到Manage Profile中可设置多个打包地址(可以是测试服,开发服,线上服,VIP服等等)本地/远端打包设置可以⽣生成许多不同的设置:测试服、正式服、VIP服等等 • Local Build Path - 本地端打包路路径• Local Load Path - 本地端加载路路径• Remote Build Path - 远端打包路路径• Remote Load Path - 远端加载路路径Unity3D资源异步加载(三)——Addressables资源异步加载Tool里面包括你所用到的工具Unity3D资源异步加载(三)——Addressables资源异步加载包括资源加载分析Profiles,测试服务Hosting Services,Labels标签等等play Mode Script有三个选项,第一个是快速加载(faster),可以在Unity编辑器中测试,第二个是模拟加载(advanced),Unity模拟了一个远程加载的过程,第三个Build加载(requires),程序打包的时候,先要选择他,对资源进行打包Unity3D资源异步加载(三)——Addressables资源异步加载Bulid就是打包资源

Addressables资源打包过程Unity3D资源异步加载(三)——Addressables资源异步加载

将需要异步加载的资源,勾选Addressable活着直接拖到你默认的Group组或者你自己创建的Group组中Unity3D资源异步加载(三)——Addressables资源异步加载标记1的位置可以修改你资源的名称标记2的位置可以设置你资源的标签注意:后续可以通过标签或者名字加载资源将所有资源添加进来后,在Build的位置打包资源,资源打包基本就说完了,至于细节的东西,大家可以开API文档。

资源加载方式上面资源打包完成后,进行资源异步加载

InstantiateAsync()• 异步实例例化• 系统不会等待• 调⽤用完成时会回来接着运⾏行行 • ⼤大量量实例例化不会卡住系统LoadAssetAsync()• 异步加载• 资源可以在本地也可以在远端服务器

using UnityEngine;using UnityEngine.AddressableAssets;using UnityEngine.ResourceManagement.AsyncOperations;public class Loading : MonoBehaviour{//直接选择拖入目标public AssetReference box;/// /// 加载/// void LoadBox(){box.LoadAssetAsync().Completed += OnLoaded;}//加载完成的回调void OnLoaded(AsyncOperationHandle obj){GameObject cube = obj.Result;}}

通过名字加载Unity3D资源异步加载(三)——Addressables资源异步加载

using UnityEngine;using UnityEngine.AddressableAssets;using UnityEngine.ResourceManagement.AsyncOperations;public class Loading : MonoBehaviour{/// /// 加载/// void LoadBox(){Addressables.LoadAssetAsync("cube").Completed += OnLoaded;//异步加载实例化//Addressables.InstantiateAsync("cube");}//加载完成的回调void OnLoaded(AsyncOperationHandle obj){GameObject cube = obj.Result;}}

通过标签名称加载(适合加载材质贴图等)Unity3D资源异步加载(三)——Addressables资源异步加载

Addressables.LoadAssetsAsync(new List { "key", "label" }, null, Addressables.MergeMode.Intersection).Completed += (AsyncOperationHandle obj) => {GameObject box = ((AsyncOperationHandle)obj).Result[0];};

注意:⚠️当⼀一个Resources⽂文件夹内的资源被标记为Addressable时,系统会⾃自 动将它从Resources⽂文件夹移出到Resources_moved的新⽂文件夹。• 默认的关联位置会指向原来的旧路路径。• 原本的加载代码会从Resources.LoadAsync (“map /city.prefab”)变成 Addressables.LoadAssetAsync ( “map / city.prefab”);

旧版版转换:当⼯工程有Asset Bundles设置时,第⼀一次打开Addressables菜单会询问 是否要全部转入Addressables群组。

Addressables是基于Asset Bundles系统的延伸,你可以把Asset Bundles视为⼿手动管理理,Addressables视为⾃自动管理理。你是可以完全只采⽤用Addressables的。虽然说Addressables和Asset Bundles可以混⽤用,但官⽅方的⽬目标并非两者共存,⽽而是往Addressables能处理理⼀一切相关⼯工作为⽬目标。public GameObject XXX 改为 public AssetReference XXX; • Instantiate() 改为 AssetRefName.InstantiateAsync();加载⽤用LoadAssetAsync();

总结旧版Assetbudle和Addressable相比,后者使用更简便,而且不用自己去管理资源存放的地址,资源更新也比较方便。Addressables不是只有加载或是实例例化,你可以查询该物件在哪⾥里里。 • 系统会帮你处理理关联性Build Script可以让你⾃自⼰己写打包流程Addressables是基于Asset Bundle架构做的⾼高阶流程。未来也会以Addressable为主

Addressable目前也存在一些问题,比如不支持脚本打包、A工程打包,B工程加载使用存在Bug等等。

免责声明:非本网注明原创的信息,皆为程序自动获取自互联网,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责;如此页面有侵犯到您的权益,请给站长发送邮件,并提供相关证明(版权证明、身份证正反面、侵权链接),站长将在收到邮件24小时内删除。

相关阅读