(五)unity加载AssetBundle中的Assets资源

加载assets通用代码片段:

T objectFromBundle = bundleObject.LoadAsset<T>(assetName);其中T 是尝试加载的资源类型。


Unity提供了三个不同的API从AssetBundles加载UnityEngine.Objects,这些API都绑定到AssetBundle对象上,并且这些API具有同步和异步变体:

LoadAsset (LoadAssetAsync)

LoadAllAssets (LoadAllAssetsAsync)

LoadAssetWithSubAssets (LoadAssetWithSubAssetsAsync)

1、区别:

加载多个独立的UnityEngine.Objects时应使用LoadAllAsset。并且只有在需要加载AssetBundle中的大多数或所有对象时,才应该使用它。与其它两个API相比,LoadAllAsset比对LoadAsset的多个单独调用略快一些。因此,如果要加载的Asset数量很大,但如果需要一次性加载不到三分之二的AssetBundle,则要考虑将AssetBundle拆分为多个较小的包,再使用LoadAllAsset。

加载包含多个嵌入式对象的复合Asset时,应使用LoadAssetWithSubAsset,例如嵌入动画的FBX模型或嵌入多个sprite图片。也就是说,如果需要加载的对象都来自同一Asset,但与许多其它无关对象一起存储在AssetBundle中,则使用此API。

任何其它情况,请使用LoadAsset或LoadAssetAsync。

2、使用方法:

同步加载单个游戏对象:

GameObject gameObject = loadedAssetBundle.LoadAsset<GameObject>(assetName);

同步加载所有资源:

Unity.Object[] objectArray = loadedAssetBundle.LoadAllAssets();

异步加载单个游戏对象:

AssetBundleRequest request = loadedAssetBundleObject.LoadAssetAsync<GameObject>(assetName);

yield return request;

var loadedAsset = request.asset;

异步加载所有资源:

AssetBundleRequest request = loadedAssetBundle.LoadAllAssetsAsync();

yield return request;

var loadedAssets = request.allAssets;



END

这些API的同步版本总是比异步版本快至少一个帧(其实是因为异步版本为了确保异步,都至少延迟了1帧),异步加载每帧会加载多个对象,直到它们的时间切片切出。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。