标签:流程 加载完成 list 等等 开发 ref info 完成 卡住
本篇介绍Addressables资源加载,也是基于AssetBundle之上分装,Addressables是在Unity2018版本以后出的,直接可以在Window-->Package Manager里找到Addressables,目前已经到了1.7.5版本。安装完成后,工程中的资源都会出现Addressable可选项
安装完成后进入window->Asset Management->Addressable->Groups
Addressables资源打包过程
将需要异步加载的资源,勾选Addressable活着直接拖到你默认的Group组或者你自己创建的Group组中
标记1的位置可以修改你资源的名称
标记2的位置可以设置你资源的标签
注意:后续可以通过标签或者名字加载资源
将所有资源添加进来后,在Build的位置打包资源,资源打包基本就说完了,至于细节的东西,大家可以开API文档。
资源加载方式
上面资源打包完成后,进行资源异步加载
InstantiateAsync()
? 异步实例例化
? 系统不会等待
? 调?用完成时会回来接着运?行行 ? ?大量量实例例化不会卡住系统
LoadAssetAsync()
? 异步加载
? 资源可以在本地也可以在远端服务器
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
public class Loading : MonoBehaviour
{
//直接选择拖入目标
public AssetReference box;
/// <summary>
/// 加载
/// </summary>
void LoadBox()
{
box.LoadAssetAsync<GameObject>().Completed += OnLoaded;
}
//加载完成的回调
void OnLoaded(AsyncOperationHandle<GameObject> obj)
{
GameObject cube = obj.Result;
}
}
通过名字加载
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
public class Loading : MonoBehaviour
{
/// <summary>
/// 加载
/// </summary>
void LoadBox()
{
Addressables.LoadAssetAsync<GameObject>("cube").Completed += OnLoaded;
//异步加载实例化
//Addressables.InstantiateAsync("cube");
}
//加载完成的回调
void OnLoaded(AsyncOperationHandle<GameObject> obj)
{
GameObject cube = obj.Result;
}
}
通过标签名称加载(适合加载材质贴图等)
Addressables.LoadAssetsAsync<GameObject>(new List<object> { "key", "label" }, null, Addressables.MergeMode.Intersection).Completed += (AsyncOperationHandle<IList<GameObject>> obj) => {
GameObject box = ((AsyncOperationHandle<IList<GameObject>>)obj).Result[0];
};
注意:??
当?一个Resources?文件夹内的资源被标记为Addressable时,系统会?自 动将它从Resources?文件夹移出到Resources_moved的新?文件夹。
? 默认的关联位置会指向原来的旧路路径。
? 原本的加载代码会从Resources.LoadAsync <GameObject>(“map /
city.prefab”)变成 Addressables.LoadAssetAsync <GameObject>( “map / city.prefab”);
旧版版转换:
当?工程有Asset Bundles设置时,第?一次打开Addressables菜单会询问 是否要全部转入Addressables群组。
总结
旧版Assetbudle和Addressable相比,后者使用更简便,而且不用自己去管理资源存放的地址,资源更新也比较方便。
Addressables不是只有加载或是实例例化,你可以查询该物件在哪?里里。 ? 系统会帮你处理理关联性
Build Script可以让你?自?己写打包流程
Addressables是基于Asset Bundle架构做的?高阶流程。
未来也会以Addressable为主
Addressable目前也存在一些问题,比如不支持脚本打包、A工程打包,B工程加载使用存在Bug等等。
Unity3D资源异步加载(三)——Addressables资源异步加载
标签:流程 加载完成 list 等等 开发 ref info 完成 卡住
原文地址:https://blog.51cto.com/myselfdream/2488786