10月9日AssetBundle学习笔记
来源:互联网 发布:网络逗逗迪迪爱探险 编辑:程序博客网 时间:2024/06/05 08:53
//创建AB
using UnityEditor;
using System.IO;
public class CreateAssetBundle
{
/// <summary>
/// 建立AssetBundle包
/// </summary>
[MenuItem("Assets/Build AssetBundles")]
public static void BuildAllAssetBundle()
{
string str = "AssetBundles";
//在项目根文件下创建文件夹
if (Directory.Exists(str) == false)
{
Directory.CreateDirectory(str);
}
//建立AssetBundle包
BuildPipeline.BuildAssetBundles(str, BuildAssetBundleOptions.UncompressedAssetBundle, BuildTarget.StandaloneWindows64);
}
}
//记载AB
/*
* https://docs.unity3d.com/Manual/AssetBundles-Native.html
*/
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.IO;
using UnityEngine.Networking;
public class LoadFromFileExample : MonoBehaviour
{
string path = "AssetBundles/scene/cubewall.ab";
void Start ()
{
//加载AssetBundle
//AssetBundle material = AssetBundle.LoadFromFile("AssetBundles/share.ab");
//AssetBundle ab = AssetBundle.LoadFromFile("AssetBundles/scene/cubewall.ab");
//GameObject wallPrefab = ab.LoadAsset<GameObject>("cubewall");
//Instantiate(wallPrefab);
//Object[] objs = ab.LoadAllAssets();
//foreach (Object temp in objs)
//{
// Instantiate(temp);
//}
StartCoroutine("LoadAssetsFromFileAsync");
LoadABManifest();
}
#region 第一种加载AssetBundle的方式 AsseyBundle.LoadFromMemory
/// <summary>
/// 第一种加载AssetBundle的方式 LoadFromMemoryAsync异步加载
/// </summary>
/// <returns></returns>
IEnumerator LoadAsstesFromMemoryAsnyc()
{
//第一种加载AssetBundle的方式 LoadFromMemoryAsync异步
AssetBundleCreateRequest request = AssetBundle.LoadFromMemoryAsync(File.ReadAllBytes(path));
yield return request;
AssetBundle ab = request.assetBundle;
//使用资源
GameObject obj = ab.LoadAsset<GameObject>("cubewall");
Instantiate(obj);
}
/// <summary>
/// LoadFromMemoryAsync同步加载
/// </summary>
void LoadAssetsFromMemory()
{
AssetBundle ab = AssetBundle.LoadFromMemory(File.ReadAllBytes(path));
//使用资源
GameObject obj = ab.LoadAsset<GameObject>("cubewall");
Instantiate(obj);
}
#endregion
#region 第二种加载AssetBundle的方式 AsseyBundle.LoadFromFile
/// <summary>
/// 第二种加载AssetBundle的方式 LoadFromFileAsync异步
/// </summary>
IEnumerator LoadAssetsFromFileAsync()
{
AssetBundleCreateRequest request = AssetBundle.LoadFromFileAsync(path);
yield return request;
AssetBundle ab = request.assetBundle;
//使用资源
GameObject obj = ab.LoadAsset<GameObject>("cubewall");
Instantiate(obj);
}
/// <summary>
/// 第二种加载AssetBundle的方式 LoadFromFile 同步
/// </summary>
void LoadAssetsFromFile()
{
AssetBundle ab = AssetBundle.LoadFromFile(path);
//使用资源
GameObject obj = ab.LoadAsset<GameObject>("cubewall");
Instantiate(obj);
}
#endregion
#region 第三种种加载AssetBundle的方式 WWW.LoadFromCacheOrDownload
/// <summary>
/// WWW本地文件记载
/// </summary>
/// <returns></returns>
IEnumerator LoadAssetsByWWW()
{
while (!Caching.ready)
{
yield return null;
}
//1 前缀file:// 或 file:///
//2 路径前加@ 为强制不转义 的符号,在里面的转义字符无效
//WWW www = WWW.LoadFromCacheOrDownload("file:///D:\\UserData\\My Documents\\U3D Projects\\Test\\AssetBundle\\AssetBundles\\scene\\cubewall.ab", 1);
WWW www = WWW.LoadFromCacheOrDownload(@"file:///D:\UserData\My Documents\U3D Projects\Test\AssetBundle\AssetBundles\scene\cubewall.ab", 1);
yield return www;
if (!string.IsNullOrEmpty(www.error))
{
Debug.Log(www.error);
yield break;
}
AssetBundle ab = www.assetBundle;
Instantiate(ab.LoadAsset<GameObject>("cubewall"));
}
/// <summary>
/// WWW服务器文件加载
/// </summary>
/// <returns></returns>
IEnumerator LoadAssetsByWWW2()
{
while (!Caching.ready)
{
yield return null;
}
WWW www = WWW.LoadFromCacheOrDownload(@"http://Localhost/AssetBundles\scene\cubewall.ab", 1);
yield return www;
if (!string.IsNullOrEmpty(www.error))
{
Debug.Log(www.error);
yield break;
}
AssetBundle ab = www.assetBundle;
Instantiate(ab.LoadAsset<GameObject>("cubewall"));
}
#endregion
#region 第四种种加载AssetBundle的方式 UnityWebRequest
IEnumerator LoadAssetsByWeb()
{
//本地
//string url = @"file:///D:\UserData\My Documents\U3D Projects\Test\\AssetBundle\AssetBundles\scene\cubewall.ab";
//服务器
string url = @"http://Localhost/AssetBundles\scene\cubewall.ab";
UnityWebRequest request = UnityWebRequest.GetAssetBundle(url);
yield return request.Send();
//1
//AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request);
//2
AssetBundle ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;
Instantiate(ab.LoadAsset<GameObject>("cubewall"));
}
#endregion
#region 通过Manifest文件得到某个包的依赖
void LoadABManifest()
{
AssetBundle manifestAB = AssetBundle.LoadFromFile("AssetBundles/AssetBundles");
AssetBundleManifest manifest = manifestAB.LoadAsset<AssetBundleManifest>("AssetBundleManifest");
//foreach (string name in manifest.GetAllAssetBundles())
//{
// Debug.Log(name);
//}
string[] str = manifest.GetAllDependencies("scene/cubewall.ab");
foreach (string name in str)
{
print(name);
AssetBundle.LoadFromFile("AssetBundles/" + name);
}
}
#endregion
}
- 10月9日AssetBundle学习笔记
- jsp学习笔记2(9月10日)
- 【9月23日】学习笔记
- 10月7日学习笔记
- 10月24日 css学习笔记
- 10月27日 css学习笔记
- 10月6日学习笔记
- 10月7日C++学习笔记
- 10月7日Unity学习笔记
- 10月8日学习笔记
- 9月10日Axure psd笔记
- 9月10日周日训练笔记
- 数据库系统概论学习笔记(10月14日首发,10月22日更新)
- jsp学习笔记2(9月9日)
- jsp学习笔记0(9月1日)
- jsp学习笔记3(9月11日)--
- 2010年9月19日学习笔记
- 2012年3月9日C++学习笔记
- mfc 内嵌cef浏览器开发
- ActiveMQ的基本使用
- 斜率小于0的连线数量 51NOD
- linux命令--grep
- (二)索引规约
- 10月9日AssetBundle学习笔记
- Python 字符串匹配(match)
- [练习]背包DP 竞赛得分
- 点击新闻条目显示更详细的信息
- HashMap分析
- ubuntu14.04 安装opencv 2.13
- android中sqlite数据库的使用
- 设计模式【适配器模式Adapter Pattern】
- JavaScript的基础应用之复选框