[Unity AssetBundle]Asset资源处理

什么是AssetBundle

在很多类型游戏的制作过程中,开发者都会考虑一个非常重要的问题,即如何在游戏运行过程中对资源进行动态的下载和加载。因此,Unity引擎引入了AssetBundle这一技术来满足开发者的需求。

AssetBundle是Unity引擎提供的一种用户存储再远的文件格式,它可以存储任意一种Unity引擎能够识别的资源,例如模型、纹理、音频、动画甚至整个场景。

同时,AssetBundle也可以包含开发者自定义的二进制文件,只需要将二进制文件的扩展名改成.bytes,Unity引擎就可以识别它为TextAsset,从而就可以打包到AssetBundle文件里边。

如何创建AssetBundle

//通过该接口,开发这可以将编辑器中任意类型的Asset打包成AssetBundle文件.
BuildPipeline.BuildAssetBundle(null,null,null,null,null);
BuildAssetBundle的参数
 参数 解释说明
mainAsset 用于指定该AssetBundle文件中的主要资源,该资源可以通过AssetBundle.mainAsset来直接进行读取
assets   用于指定该AssetBundle文件中包含的资源
pathName 用于指定该AssetBundle文件的创建地址
assetBundleOptions 用于指定该AssetBundle文件的创建选项,默认情况下为Collect Dependencies和CompleteAssets
targetPlatform 用于指定改AssetBundle文件所用于发布的平台
//通过该接口,开发者可以直接将项目中的一个或者若干个场景以流式加载的方式打包成AssetBundle文件。
BuildPipeline.BuildStreamSceneAssetBundle(null,null,null);
BuildStreamedSceneAssetBundle
参数 解释说明
levels 用于指定要被打包进入AssetBundle文件的场景名称
locationPath 用于指定该AssetBundle文件的创建地址
target 用于指定该AssetBundle文件所用于的发布平台
//该接口功能与BuildPipeline.BuildAssetBundle接口相同,但是创建时可以每个Object指定一个自定义的名字
BuildPipeline.BuildAssetBundleExplicitAssetNames(null,null,null,null,null);

  

如何下载AssetBundle

非缓存机制

void Start () {
    StartCoroutine ("LoadAsset");
}
public IEnumerator LoadAsset()
{
    WWW www = new WWW (url);
    yield return www;
}

缓存机制

void Start () {
    StartCoroutine ("LoadAsset");
}
public IEnumerator LoadAsset()
{
    WWW www = WWW.LoadFromCacheOrDownload (url, 5);
    yield return www;
}

如何加载AssetBundle

WWW.assetbundle属性

	void Start () {
		StartCoroutine ("LoadAsset");
	}
	public IEnumerator LoadAsset()
	{
		WWW www = WWW.LoadFromCacheOrDownload (url, 5);
		yield return www;
		
		
		if (www.error != null) {
			Debug.Log (www.error);
			return;
		}
		AssetBundle bundle = www.assetBundle;
	}

  AssetBundle.CreateFromFile方法

	void Start () {
		AssetBundle bundle = AssetBundle.CreateFromFile (path);
	}

  AssetBundle.CreateFromMemory

	void Start () {
		StartCoroutine ("LoadAsset");
	}
	public IEnumerator LoadAsset()
	{
		WWW www = WWW.LoadFromCacheOrDownload (url, 5);
		yield return www;
		
		
		if (www.error != null) {
			Debug.Log (www.error);
			return;
		}
		
		byte[] data = www.bytes;
		AssetBundle bundle = AssetBundle.CreateFromMemory(data);
	}

待续...

原文地址:https://www.cnblogs.com/daxiaxiaohao/p/4143264.html