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

加载assets通用代码片段:

T objectFromBundle = bundleObject.LoadAsset(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(assetName);

同步加载所有资源:

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

异步加载单个游戏对象:

AssetBundleRequest request = loadedAssetBundleObject.LoadAssetAsync(assetName);

yield return request;

var loadedAsset = request.asset;

异步加载所有资源:

AssetBundleRequest request = loadedAssetBundle.LoadAllAssetsAsync();

yield return request;

var loadedAssets = request.allAssets;



END

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

你可能感兴趣的:((五)unity加载AssetBundle中的Assets资源)