Unity3D AssetBundle的打包和加载

 

Unity3D AssetBundle的打包和加载_第1张图片

                 Unity3D AssetBundle的打包和加载


 

目录

1、博文介绍

2、具体思路和写法

(1)AB包的打包

(2)AB包的加载

(3)AB包卸载

3.资源包下载

4.推送

5.结语


1、博文介绍

       本篇博客主要起记录和学习作用,简单的介绍一下AB包的打包和几种不同方法加载AB包的方式,若各位同学有幸看到本篇博客,希望能够对你有所帮助。


2、具体思路和写法

(1)AB包的打包

        打包这里就不在做过多的介绍,直接拷贝官方的方法,很简单也很直观,这里只要注意在Unity内为资源设置好名字和后缀就好了,在资源商店里有一个免费的AB包管理软件,评价好像挺高的,博主回头抽时间研究一下,再写一篇文章介绍一下吧(完了,不知不觉又立了个flag)。

using  UnityEditor;
using  System.IO;

/// 
/// time:2019/1/19
/// author:King.Sun
/// description:AB包打包
/// 
public class LoadAB{


	[MenuItem("Assets/Bulid AssetBundle")]
	static void BuildAssetBundle()
	{
		//创建目录
		string abPath = "Assets/AssetBundles";
		if (!Directory.Exists(abPath))
		{
			Directory.CreateDirectory(abPath);
		}
		//打包 os/win
		#if UNITY_STANDALONE_WIN
				BuildPipeline.BuildAssetBundles(abPath, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
		#elif UNITY_STANDALONE_OSX
				BuildPipeline.BuildAssetBundles(abPath, BuildAssetBundleOptions.None, BuildTarget.StandaloneOSX);
		#endif
		
	}
	
}

       这里我就直接本地加载了,考虑到同学你用的是win还是mac这里加了个宏,不同平台打包设定是不一样的,同学用到了自行查API,打包就不细说了。

Unity3D AssetBundle的打包和加载_第2张图片

博主这里将一个Cube打到一个AB包里,包名为cube.unity3d,后缀为assetbundle。

Unity3D AssetBundle的打包和加载_第3张图片

       打包后就可以看到在我们设定的目录下,生成了cube.unity3d的AB包和对应的manifest描述文件,描述文件内记载了,我们该AB包里的资源和依赖,至此打包工作完成

(2)AB包的加载

这里我们通过本地路径来加载AB包,不同平台下的路径是不同的这里需要各位同学去注意一下

                //不同平台下路径不同
		#if UNITY_ANDROID
		_abPath = "jar:file://" + Application.dataPath + "!/assets/AssetBundles/";
		#elif UNITY_IPHONE
		_abPath = Application.dataPath + "/Raw/AssetBundles/";
		#elif UNITY_STANDALONE_WIN || UNITY_EDITOR
		_abPath = Application.dataPath + "/AssetBundles/";
		#else
		_abPath = string.Empty;
		#endif

这里我们为我们的AB包路径 _abPath赋值。

 

加载方式1:  LoadFromMemoryAsync 异步加载,通过LoadFromMemoryAsync加载从服务器或本地获取的字节流来加载

StartCoroutine(LoadABPackage1(_abPath));

IEnumerator LoadABPackage1(string path)
	{
		AssetBundleCreateRequest request = AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(path+"cube.unity3d.assetbundle"));
		yield return request;
		ab = request.assetBundle;
		Object cube = ab.LoadAsset("Cube.prefab");
		Instantiate(cube);
	}

加载方式2:LoadFromMemory 同步加载,通过LoadFromMemoryAsync加载从服务器或本地获取的字节流来加载

LoadABPackage2();


void LoadABPackage2()
{
	ab = AssetBundle.LoadFromMemory(File.ReadAllBytes(_abPath+"cube.unity3d.assetbundle"));
	Object cube = ab.LoadAsset("Cube.prefab");
	Instantiate(cube);
}

 

加载方式3:LoadFromFileAsync 直接通过本地路径异步加载,只能加载本地AB包

StartCoroutine(LoadABPackage3(_abPath));


	IEnumerator LoadABPackage3(string path)
	{
		AssetBundleCreateRequest request = AssetBundle.LoadFromFileAsync(path+"cube.unity3d.assetbundle");

		yield return request;

		ab = request.assetBundle;
		Object cube = ab.LoadAsset("Cube.prefab");
		Instantiate(cube);
	}

 

加载方式4:LoadFromFile 直接通过本地路径同步加载,只能加载本地AB包

LoadABPackage4(_abPath);

	void LoadABPackage4(string path)
	{
		ab = AssetBundle.LoadFromFile(path + "cube.unity3d.assetbundle");
		Object cube = ab.LoadAsset("Cube.prefab");
		Instantiate(cube);
	}

 

加载方式5:WWW异步加载方法 本地服务器均可

StartCoroutine(LoadABPackage5(_abPath));

	IEnumerator LoadABPackage5(string path)
	{
		WWW www = WWW.LoadFromCacheOrDownload(path+"cube.unity3d.assetbundle",1);
		yield return www;
		if (!string.IsNullOrEmpty(www.error))
		{
			Debug.Log(www.error);
			yield break;
		}

		ab = www.assetBundle;
		Object cube = ab.LoadAsset("Cube.prefab");
		Instantiate(cube);
	}

 

加载方式6:UnityWebRequest 异步加载方式 本地服务器均可

StartCoroutine(LoadABPackage6(_abPath));

IEnumerator LoadABPackage6(string path)
	{
		UnityWebRequest request = UnityWebRequestAssetBundle.GetAssetBundle(path+"cube.unity3d.assetbundle");
		yield return request.Send();
		ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;
		Object cube = ab.LoadAsset("Cube.prefab");
		Instantiate(cube);
	}

(3)AB包卸载

AssetBundle.Unload(false),卸载AB包资源,同时保留内存中已加载的资源; 
AssetBundle.Unload(true),卸载AB包资源,同时卸载内存中已加载的资源,会造成资源的丢失

3.资源包下载

完整工程下载:https://download.csdn.net/download/mr_sun88/10927709


4.推送

先空着


5.结语

       本篇博客只是简单的介绍了AB包的打包和加载,希望有幸看到本篇文章的同学能有所收获,另博主能力有限,文中若有错误的地方期望各位看家可以指点交流。

       QQ交流群:806091680(Chinar)

       该群为CSDN博主Chinar所创,推荐一下!我也在群里!

       本文属于原创文章,转载请著名作者出处并置顶!!!!!

你可能感兴趣的:(Unity3D AssetBundle的打包和加载)