Unity加载AssetBundle

使用版本 Unity2017.4.10 --- Vs2017 ---- Windows7

忘记加上一句,使用IIS搭建FTP的时候,别设置登录限制

LZMA压缩->YuSongMomo->https://www.xuanyusong.com/archives/3095

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

      读取路径为:

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,去掉头营养贼高

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值