使用版本 Unity2017.4.10 --- Vs2017 ---- Windows7
忘记加上一句,使用IIS搭建FTP的时候,别设置登录限制
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
读取路径为:
ftp://127.0.0.1:10091//StreamingAssets/PC/PC.manifest
Tag为:prefab,image,material,依赖关系如下
总的Manifest如下:
其中,prefab.asset里面只有一个Cube,这个Cube的材质是引用image里面的一张图片
image manifest:
prefab manifest:
打包代码:
using UnityEditor;
public class BuildAssetBundle : Editor {
[MenuItem("Build/PC")]
public static void BuildPC()
{
BuildPipeline.BuildAssetBundles("Assets/StreamingAssets/PC",BuildAssetBundleOptions.None,BuildTarget.StandaloneWindows64);
}
[MenuItem("Build/Android")]
public static void BuildAndroid()
{
BuildPipeline.BuildAssetBundles("Assets/StreamingAssets/Android",BuildAssetBundleOptions.None,BuildTarget.Android);
}
}
加载代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class LoadWWW : MonoBehaviour
{
void Start()
{
// 服务器地址,加载的包名(你打包到某个文件夹下,就会有一个对应的文件夹的manifest文件),版本号
StartCoroutine(LoadManifest("ftp://127.0.0.1:10091/StreamingAssets/PC/", "PC", 1));
}
/// <summary>
/// 加载所有依赖
/// </summary>
/// <param name="path"></param>
/// <param name="filename"></param>
/// <param name="version"></param>
/// <returns></returns>
IEnumerator LoadManifest(string path, string filename, int version)
{
WWW www = new WWW(path + filename); // 加载路径
yield return www; // 等待加载完成
// 如果错误不为空,这里其实应该return,但是我宁愿看见详细的报错,也不想只有一个Debug
if (www.error != null)
{
Debug.Log(www.error);
}
AssetBundle ab = www.assetBundle;
AssetBundleManifest manifestName = ab.LoadAsset<AssetBundleManifest>("AssetBundleManifest"); // 获得Manifest里面的依赖
ab.Unload(false); // 写在相应包,注意别写True,下面会解释
www.Dispose();
string[] abName = manifestName.GetAllAssetBundles(); // 遍历所有AssetBundle名字
foreach (var item in abName)
{
if (item == "prefab")
StartCoroutine(LoadPrefab(path, item, version));
else
StartCoroutine(LoadPrefab(path, item, version,false));
}
yield return null;
}
/// <summary>
/// 加载AssetBundle里面所有的Prefab
/// </summary>
/// <param name="path"></param>
/// <param name="filename"></param>
/// <param name="version"></param>
/// <returns></returns>
IEnumerator LoadPrefab(string path, string filename, int version, bool IsLoad = true)
{
WWW www = WWW.LoadFromCacheOrDownload(path + filename,version); // 将这个包缓存下载,下次再次加载的时候version不变,就不会重新从网络上下载
yield return www; // 等待下载OR加载完成
if (www.error != null) // 如果报错信息不为空
Debug.Log(www.error);
AssetBundle asbundle = www.assetBundle; // 获得包
foreach (var item in asbundle.GetAllAssetNames()) // 遍历包中的所有项
{
GameObject obj = asbundle.LoadAsset<GameObject>(item); // 加载
if (IsLoad) // 我们包里面有图片和材质,这两个不能生成实例
Instantiate<GameObject>(obj);
}
}
}
下面是对于Start里面三个参数的图片,那坨马赛克是127.0.0.1(估计你们也不信 Hah) ftp://XXX:端口//文件夹名字//文件名
之后运行,当,就会发现出现了一只Cube,去掉头营养贼高