我把AssetBundless整个文件的资源都放在了我的web服务器上,里面除了有AssetBundless自身的4个文件之外,还有player和plane各4个文件。[

](http://www.wjgbaby.com/wp-content/uploads/2017/10/17102103-300x118.png)
](http://www.wjgbaby.com/wp-content/uploads/2017/10/17102103-300x118.png)
将本地打包好的AssetBundle 文件上传至web 服务器,然后本地从web 服务器端下载所有的AssetBundle 文件。从服务器端下载AssetBundle 文件,我们需要这些文件的web 路径地址,每一个地址对应一个AssetBundle 文件。 我们不可能在代码中写几十上百个文件的web 地址,所以说我们需先下载“目录”的AssetBundle 文件,在这里也就是AssetBundless.manfiest,然后通过它里面的AssetBundle 名称再来间接的获取其他的AssetBundle 文件的下载路径地址。 代码如下:

using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
//引入UnityEngine.Networking用来执行网络操作

public class load : MonoBehaviour
{
//根目录的文件夹产生的AssetBundless文件地址
private string rootAssetBundle = @”http://www.wjgbaby.com/unityModel/AssetBundless/AssetBundless";
//根目录地址
private string assetBundleRoot = @”http://www.wjgbaby.com/unityModel/AssetBundless/";

void Start ()
{
    //开启协程
    StartCoroutine("DownloadAssetBundless");
}

/// <summary>
/// 下载根目录AssetBundle文件
/// </summary>
/// <returns></returns>
IEnumerator DownloadAssetBundless()
{
    //创建一个获取AssetBundle 文件的web 请求.
    UnityWebRequest request = UnityWebRequest.GetAssetBundle(rootAssetBundle);

    //发送web请求
    yield return request.SendWebRequest();

    //从web获取内容,返回一个AssetBundle类型的数据
    AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request);

    //获取AssetBundless.manifest的manifest文件
    AssetBundleManifest manifest = ab.LoadAsset<AssetBundleManifest>("AssetBundleManifest");

    //获取AssetBundless.manifest文件中的所有AssetBundle的名称信息
    string\[\] assets= manifest.GetAllAssetBundles();
    for (int i = 0; i <assets.Length;i++)
    {
        Debug.Log(assetBundleRoot+assets\[i\]);
        //开启协程
        StartCoroutine(DownLoadSingleAssetBundel(assetBundleRoot + assets\[i\]));
    }
}

/// <summary>
/// 下载模型单个的AssetBundle文件
/// </summary>
/// <returns></returns>
IEnumerator DownLoadSingleAssetBundel(string str)
{
    UnityWebRequest request = UnityWebRequest.GetAssetBundle(str);
    yield return request.SendWebRequest();
    AssetBundle ab = DownloadHandlerAssetBundle.GetContent(request);

    //通过获取AssetBundle对象获取内部所有资源的名称,返回在一个数组
    string\[\] names= ab.GetAllAssetNames();

    //遍历数组,服务端下载所有文件
    for (int i= 0;i< names.Length;i++)
    {
        //截取路径地址中的文件名,且无后缀名. 需要引入System.IO 命名空间.
        string shortName = Path.GetFileNameWithoutExtension(names\[i\]);
        GameObject go = ab.LoadAsset<GameObject>(shortName);
        GameObject.Instantiate<GameObject>(go, Vector3.zero, Quaternion.identity);
    }
}

}

结果如下,两个物体都是从web服务器加载过来的。[

](http://www.wjgbaby.com/wp-content/uploads/2017/10/17102101-300x173.jpg)
](http://www.wjgbaby.com/wp-content/uploads/2017/10/17102101-300x173.jpg)