用谷歌打开查看官方文档(谷歌可以翻译)
分组策略
打包平台
打包路径
将里面的内容清空
将资源放在StreamingAssets
打包代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;
using System.IO;
public class CreatAssetbudles {
/// <summary>
/// 点击后,所有设置了AssetBundle名称的资源会被分单个打包出来
/// </summary>
[MenuItem("Assets/Build AssetBundles")]
static void BuildAssetBudles()
{
string dir = "AssetBundles";
//查看有没有这个目录
if (!Directory.Exists(dir))
{
//如果没有这个目录就创建这个目录
Directory.CreateDirectory(dir);
}
//BuildPipeline是一个类位于UnityEditor之下
//第一个参数是输出路径也就是要打包在哪里
//第二个参数是build的一个选项(None是不去设置任何选项)
//BuildAssetBundleOptions.UncompressedAssetBundle 不压缩,包大加载快
//BuildAssetBundleOptions.ChunkBasedCompression 使用LZ4压缩,压缩率
//BuildAssetBundleOptions.None 使用LZMA算法压缩,
//压缩的包更小但是家在时间更长,使用之前需要整体解压,一旦被解压,
//这个包会使用LZ4重新压缩 使用资源的时候
//不需要整体解压 在下载的时候可以使用LZMA算法,
//一旦它被下载了之后,它会使用LZ4算法保存到本地上
//没有LZMA高,但是我们可以加在指定资源而不用解压全部
//第三个参数是资源打包的平台的目标(也就是只能在哪个平台上用)
BuildPipeline.BuildAssetBundles(dir,BuildAssetBundleOptions.None,
BuildTarget.StandaloneWindows64);
//刷新Asset目录
AssetDatabase.Refresh();
}
}
加载打包资源代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using UnityEngine.Networking;
public class LoadFromFileExample : MonoBehaviour {
#region 加载资源(本地)
//void Start()
//{
// //第一种加载方式单个加载
// //加载资源必须要写上后面的后缀
// //加载依赖
// AssetBundle ab1 =
// AssetBundle.LoadFromFile("AssetBundles/scene/share.unity3d");
// //在本地加载AssetBundle
// AssetBundle ab =
// AssetBundle.LoadFromFile("AssetBundles/scene/cube.unity3d");
// //在AssetBundle加载游戏资源
// GameObject Player = ab.LoadAsset<GameObject>("Cube") as GameObject;
// ////实例化加载出来的资源
// Instantiate(Player);
// //第二种加载方式多个加载
// //将AssetBundle中的游戏资源全部加载出来
// //Object[] objs = ab.LoadAllAssets()as Object[];
// //foreach (var item in objs)
// //{
// // Instantiate(item);
// //}
//}
#endregion
#region 第一种加载AB方式 LoadFromMemoryAsync(异步,同步)
//private void Start()
//{
// StartCoroutine("Ienum");
//}
//IEnumerator Ienum()
//{
// string path = "AssetBundles/scene/cube.unity3d";
// //第一种加载AB方式 LoadFromMemoryAsync(异步)
// //File.ReadAllBytes(path) 根据这个路径读取成字节数组 在
// //LoadFromMemoryAsync内进行解析
// AssetBundleCreateRequest requst =
// AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(path));
// //等待requst加载完成
// yield return requst;
// //加载ab包
// AssetBundle ab = requst.assetBundle;
// //加载依赖
// AssetBundle ab1 =
// AssetBundle.LoadFromFile("AssetBundles/scene/share.unity3d");
// //在AssetBundle加载游戏资源
// GameObject Player = ab.LoadAsset<GameObject>("Cube") as GameObject;
// //实例化加载出来的资源
// Instantiate(Player);
//}
//同步
//void Start()
//{
// string path = "AssetBundles/scene/cube.unity3d";
// //同步请求返回值就是AssetBundle 它会等待加载完才会返回
// AssetBundle ab =
// AssetBundle.LoadFromMemory(File.ReadAllBytes(path));
// //加载依赖
// AssetBundle ab1 =
// AssetBundle.LoadFromFile("AssetBundles/scene/share.unity3d");
// //在AssetBundle加载游戏资源
// GameObject Player = ab.LoadAsset<GameObject>("Cube") as GameObject;
// //实例化加载出来的资源
// Instantiate(Player);
//}
#endregion
#region 第二种加载AB方式LoadFromFile本地异步加载
//private IEnumerator Start()
//{
// string path = "AssetBundles/scene/cube.unity3d";
// //第二种加载方式LoadFromFile
// AssetBundleCreateRequest requst=
// AssetBundle.LoadFromFileAsync(path);
// //等待requst加载完成
// yield return requst;
// //加载ab包
// AssetBundle ab = requst.assetBundle;
// //从ab包里加载依赖
// AssetBundle ab1 =
// AssetBundle.LoadFromFile("AssetBundles/scene/share.unity3d");
// //在AssetBundle加载游戏资源
// GameObject Player = ab.LoadAsset<GameObject>("Cube") as GameObject;
// //实例化加载出来的资源
// Instantiate(Player);
//}
#endregion
#region 第三种加载AB方式www加载
//IEnumerator Start()
//{
// //路径本地加载使用@"file://
// //从服务器加载就直接将路径写成“http://服务器IP在服务器里面的路径”
// string path = @"file://E:/unity 3D zuoye/AssetBundle/AssetBundles/scene/cube.unity3d";
// //检查缓存有没有准备好
// while (Caching.ready == false)
// {
// yield return null;
// }
// //从本地加载资源
// WWW www= WWW.LoadFromCacheOrDownload(path,0);
// //等待www加载完成
// yield return www;
// //检查加载时有没有出错如果出错
// if (www.error!=null)
// {
// //输出出错信息
// Debug.Log(www.error);
// //跳出该协程
// yield break;
// }
// //从www中加载ab包
// AssetBundle ab = www.assetBundle;
// //从ab包里加载依赖
// AssetBundle ab1 =
// AssetBundle.LoadFromFile("AssetBundles/scene/share.unity3d");
// //在AssetBundle加载游戏资源
// GameObject Player = ab.LoadAsset<GameObject>("Cube") as GameObject;
// //实例化加载出来的资源
// Instantiate(Player);
//}
#endregion
#region 第四种加载AB方式UnityWebRequest使用时需要引入命名空间using UnityEngine.Networking;
IEnumerator Start()
{
//本地资源路径
string path
= @"file://E:/unity 3D zuoye/AssetBundle/AssetBundles/scene/cube.unity3d";
//也可以使用服务器进行资源加载
//(从服务器加载就直接将路径写成“http://服务器IP 在服务器中文件夹的路径”)
//本地保存的路径
//string path1 = @"file:\\\F:\Assetbundle";
//开始准备下载等待下一步指令
UnityWebRequest requst
= UnityWebRequest.GetAssetBundle(path);
//让UnityWebRequest requst开始下载
yield return requst.Send();
//两种获取AB包方式(第一种)
//从UnityWebRequest requst中加载ab包资源(DownloadHandlerAssetBundle里面保存的是
//UnityWebRequest requst所下载的ab包资源)
// AssetBundle ab = DownloadHandlerAssetBundle.GetContent(requst);
//DownloadHandler里面有好多中资源加载种类比如音效资源等
//第二种获取AB包方式的 DownloadHandlerAssetBundle
AssetBundle ab =
(requst.downloadHandler as DownloadHandlerAssetBundle).assetBundle;
//将加载的资源保存到本地
//requst.downloadHandler.data 资源转换成的数组
//File.WriteAllBytes(path1,requst.downloadHandler.data);
//从ab包里加载依赖
AssetBundle ab1 =
AssetBundle.LoadFromFile("AssetBundles/scene/share.unity3d");
//在AssetBundle加载游戏资源
GameObject Player
= ab.LoadAsset<GameObject>("Cube") as GameObject;
//实例化加载出来的资源
Instantiate(Player);
////从本地加载资源
//AssetBundle manifestAB
// = AssetBundle.LoadFromFile("AssetBundles/AssetBundles");
////得到一个AssetBundleManifest对象
//AssetBundleManifest manifest
// = manifestAB.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
////得到文件里面所有cube所依赖的包
//string[] strs = manifest.GetAllDependencies("cube.unity3d");
//foreach (string item in strs)
//{
// print(item);
// //加载所依赖的包
// AssetBundle.LoadFromFile("AssetBundles/" + item);
//}
}
#endregion
#region 卸载AssetBundle3种方法
//private void Start()
//{
// //卸载AssetBundle一些没有用到的资源
// AssetBundle.UnloadAllAssetBundles(false);
// //卸载AssetBundle全部资源
// AssetBundle.UnloadAllAssetBundles(true);
// //卸载AssetBundle.UnloadAllAssetBundles(false);没卸载完的资源
// Resources.UnloadUnusedAssets();
//}
#endregion
}