1.制作AB包
新建Editor文件夹,创建实体类继承Editor,加上特性[MeneItem(string)]
using UnityEditor;
using System.IO;
public class Test : Editor {
[MenuItem("Tools/BuildAllAssetBundles")] 特性
public static void BuildAllAssetBundles()
{
string path = Application.streamingAssetsPath;//AB包存放文件夹
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
}
BuildPipeline.BuildAssetBundles(path, BuildAssetBundleOptions.ChunkBasedCompression, BuildTarget.StandaloneWindows64);//AB包存放路径;AB包压缩方式;AB包支持平台
}
}
2.加载AB包
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.Networking;
/*
*创建者:
*创建时间:
*描述:
*版本:
*/
public class TestAB : MonoBehaviour
{
string path=Application.streamingAssetsPath+"/sphere";//打包后的预设
// Start is called before the first frame update
void Start()
{
//StartCoroutine(LoadFromMemory(path));
//LoadFile();
StartCoroutine(LoadFromServer());
}
// Update is called once per frame
void Update()
{
}
//从内存异步加载
IEnumerator LoadFromMemory(string path)
{
AssetBundleCreateRequest request = AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(path));
yield return request;
AssetBundle ab=request.assetBundle;
GameObject sphere = ab.LoadAsset<GameObject>("Sphere");//Sphere:原预设体,可在资源文件mainfest中查看
Instantiate(sphere);
}
//从本地文件加载
void LoadFile()
{
AssetBundle ab = AssetBundle.LoadFromFile(Path.Combine(Application.streamingAssetsPath, "sphere"));
GameObject go = ab.LoadAsset<GameObject>("sphere");
Instantiate(go);
}
//从远程服务器加载
IEnumerator LoadFromServer()
{
string path = "file:///" + Application.streamingAssetsPath + "/sphere";//AB包
UnityWebRequest request= UnityWebRequestAssetBundle.GetAssetBundle(path);
//UnityWebRequestAsyncOperation uwr = request.SendWebRequest();
//yield return uwr;
yield return request.SendWebRequest();
AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request);
GameObject qiu = ab.LoadAsset<GameObject>("Sphere");//Sphere:原预设体
Instantiate(qiu);
}
}