using UnityEditor;
using System.IO;
//-----------------------打包--------------------------------
public class CreateAssetBundles
{
[MenuItem("Assets/Build AssetBuilds")]
static void BuildAllAssetBundle()
{
string assetbunldes_Path = "AssetBundles";
if (!Directory.Exists(assetbunldes_Path))
{
Directory.CreateDirectory(assetbunldes_Path);
}
BuildPipeline.BuildAssetBundles(assetbunldes_Path, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
}
}
//-----------------------------------------------------------
using UnityEngine;
using System.Collections;
using System.IO;
using UnityEngine.Experimental.Networking;
public class LoadFromFileExample : MonoBehaviour
{
void Start()
{
//------------------------------一.AssetBundle同步加载----------------------------
//AssetBundle ab = AssetBundle.LoadFromFile("AssetBundles/spherewall.unity3d");
//AssetBundle ab2= AssetBundle.LoadFromFile("AssetBundles/share.unity3d"); //依赖关系,先加载依赖关系
//GameObject wallPrefab = ab.LoadAsset<GameObject>("SphereWall");
//Instantiate(wallPrefab);
//--------------------------------------------------------------------------------
//------------二.协程------------------------
StartCoroutine(LoadFormMemoryAsync());
//------------------------------------
//---------------三.通过AssetBundleManifest获得某个包的依赖关系----------------------------
AssetBundle manifestAB = AssetBundle.LoadFromFile("AssetBundles/AssetBundles");
AssetBundleManifest manifest = manifestAB.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
//foreach (string name in manifest.GetAllAssetBundles())
//{
// Debug.Log(name);
//}
string[] strs = manifest.GetAllDependencies("spherewall.unity3d");
foreach (var name in strs)
{
print(name);
//AssetBundle.LoadFromFile("AssetBundles/" + name);
AssetBundle.LoadFromFile(Path.Combine("AssetBundles", name));
}
//-----------------------------------------------------------------------------------------
}
IEnumerator LoadFormMemoryAsync()
{
//1、LoadFormMemoryAsync方式
//string path = "AssetBundles/spherewall.unity3d";
//AssetBundleCreateRequest request = AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(path));
//yield return request;
//AssetBundle ab = request.assetBundle;
//GameObject spherePrefab = ab.LoadAsset<GameObject>("SphereWall");
//Instantiate(spherePrefab);
//2、LoadFromFileAsync方式
//AssetBundleCreateRequest request =AssetBundle.LoadFromFileAsync(path);
//yield return request;
//AssetBundle ab = request.assetBundle;
//GameObject spherePrefab = ab.LoadAsset<GameObject>("SphereWall");
//Instantiate(spherePrefab);
//3、WWW
//while (!Caching.ready)
//{
// yield return null;
//}
//WWW www=WWW.LoadFromCacheOrDownload(@"F:\AssetBundle\AssetBundle\AssetBundles\spherewall.unity3d", 1);
//yield return www;
//if (www.error!=null)
//{
// Debug.Log(www.error);
// yield break;
//}
//AssetBundle ab= www.assetBundle;
//GameObject spherePrefab = ab.LoadAsset<GameObject>("SphereWall");
//Instantiate(spherePrefab);
//4、服务器下载
//while (!Caching.ready)
//{
// yield return null;
//}
//WWW www = WWW.LoadFromCacheOrDownload(@"http://localhost/AssetBundles/spherewall.unity3d", 1);
//yield return www;
//if (www.error != null)
//{
// Debug.Log(www.error);
// yield break;
//}
//AssetBundle ab = www.assetBundle;
//GameObject spherePrefab = ab.LoadAsset<GameObject>("SphereWall");
//Instantiate(spherePrefab);
//5、UnityWebRequest方式
//string uri = @"file:///F:\AssetBundle\AssetBundle\AssetBundles\spherewall.unity3d";
string uri = @"http://localhost/AssetBundles/spherewall.unity3d"; //服务器地址
UnityWebRequest request = UnityWebRequest.GetAssetBundle(uri, 0);
yield return request.Send();
AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request);
//AssetBundle ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;
GameObject spherePrefab = ab.LoadAsset<GameObject>("SphereWall");
Instantiate(spherePrefab);
//AssetBundleRequest abr = ab.LoadAssetAsync<GameObject>("SphereWall");
//yield return abr;
//GameObject spherePrefab = abr.asset as GameObject;
//Instantiate(spherePrefab);
}
}
AssetBundle二
最新推荐文章于 2024-03-10 22:39:27 发布