コード例 #1
0
    /// <summary>
    /// 下载.manifest文件
    /// </summary>
    /// <param name="fileList"></param>
    /// <param name="list"></param>
    /// <returns></returns>
    private IEnumerator DownAllManifestFile(string url, List <string> fileList, Action <Dictionary <string, AssetBundleManifestData> > action)
    {
        Dictionary <string, AssetBundleManifestData> list = new Dictionary <string, AssetBundleManifestData>();

        for (int i = 0; i < fileList.Count; i++)
        {
            string fileName = fileList[i];

            UnityWebRequest request = UnityWebRequest.Get(url + fileName + Config.suffix_manifest);
            yield return(request.SendWebRequest());

            if (request.isHttpError || request.isNetworkError)
            {
                Debug.LogError(request.downloadHandler.text);
                list.Add(fileName, new AssetBundleManifestData(fileName));
            }
            else
            {
                AssetBundleManifestData abmd = new AssetBundleManifestData(request.downloadHandler.text, fileName);
                list.Add(fileName, abmd);
            }
            request.Dispose();
        }
        if (action != null)
        {
            action.Invoke(list);
        }
    }
コード例 #2
0
    /// <summary>
    /// 下载加载Main manifest文件
    /// </summary>
    /// <param name="url"></param>
    /// <param name="abmd"></param>
    /// <returns></returns>
    private IEnumerator DownMainManifestFile(string url, string fileName, Action <AssetBundleManifestData> data)
    {
        Debug.Log(url);
        UnityWebRequest request = UnityWebRequest.Get(url);

        yield return(request.SendWebRequest());

        AssetBundleManifestData abmd;

        if (request.isHttpError || request.isNetworkError)
        {
            Debug.LogError(request.downloadHandler.text);

            abmd = new AssetBundleManifestData(fileName);
        }
        else
        {
            abmd = new AssetBundleManifestData(request.downloadHandler.text, fileName);
        }
        if (data != null)
        {
            data.Invoke(abmd);
        }
        request.Dispose();
    }
コード例 #3
0
        private IEnumerator LoadActualAsset(AssetBundleManifestData manifestData, Action <string, AssetBundle> callback)
        {
            uint crc = 0;

            string[] lines;
            lines = manifestData.manifestText.Split('\n');

            if (lines[1].Contains("CRC:") && lines[5].Contains("Hash:"))
            {
                uint.TryParse(lines[1].Substring(5, lines[1].Length - 5), out crc);
                Hash128 hash = Hash128.Parse(lines[5].Split(':')[1].Trim());

                UnityWebRequest request;
                request = UnityWebRequestAssetBundle.GetAssetBundle(manifestData.assetBundleUrl, hash, crc);
                yield return(request.SendWebRequest());

                if (request.isHttpError || request.isNetworkError)
                {
                    callback?.Invoke(request.error, null);
                }

                // This one is crucial for debugging. Code 200 means downloaded from web and Code 0 means loaded from cache.
                Debug.Log(request.responseCode);

                // Download the actual content bundle
                AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(request);

                // Execute action with downloaded asset
                callback?.Invoke("none", bundle);

                // unload the bundle
                bundle.Unload(false);
            }
        }
コード例 #4
0
 public static void UnloadAssetBundle(
     AssetBundleManifestData data,
     bool isUnloadForceRefCount,
     bool unloadAllLoadedObjects = false)
 {
     AssetBundleManager.UnloadAssetBundle(data.bundle, isUnloadForceRefCount, data.manifest, unloadAllLoadedObjects);
 }
コード例 #5
0
        public void AddLoadAssetBundle(string assetBundleName, string manifestName)
        {
            if (manifestName.IsNullOrEmpty())
            {
                manifestName = "abdata";
            }
            AssetBundleManifestData bundleManifestData = new AssetBundleManifestData();

            bundleManifestData.bundle   = assetBundleName;
            bundleManifestData.manifest = manifestName;
            this.lstLoadAssetBundleInfo.Add((AssetBundleData)bundleManifestData);
        }
コード例 #6
0
 public void LoadAssetBundle(AssetBundleContainer assetBundle, Action <string, AssetBundle> callback)
 {
     MainAPI.Instance.SendRequst(MainAPI.HTTPMethod.GET, assetBundle.manifest, "", (res, err) =>
     {
         AssetBundleManifestData manifestData = new AssetBundleManifestData
         {
             manifestText   = res,
             assetBundleUrl = assetBundle.asset
         };
         StartCoroutine(LoadActualAsset(manifestData, callback));
     });
 }
コード例 #7
0
    protected T Load <T>(
        string assetBundleName,
        string assetName,
        bool isClone = false,
        string manifestAssetBundleName = null)
        where T : Object
    {
        T obj1 = new AssetBundleManifestData(assetBundleName, assetName, manifestAssetBundleName).GetAsset <T>();

        if (Object.op_Inequality((Object)(object)obj1, (Object)null) && isClone)
        {
            T obj2 = Object.Instantiate <T>(obj1);
            obj2.set_name(obj1.get_name());
            obj1 = obj2;
        }
        return(obj1);
    }
コード例 #8
0
 public static AssetBundleManifestData ReadManifestFile(string pathName)
 {
     try
     {
         if (File.Exists(pathName))
         {
             string v = File.ReadAllText(pathName);
             AssetBundleManifestData manifestData = new AssetBundleManifestData(v);
             return(manifestData);
         }
     }
     catch (Exception e)
     {
         Debug.LogError(e.ToString());
         throw;
     }
     return(null);
 }
コード例 #9
0
    /// <summary>
    /// 下载保存ab文件
    /// </summary>
    /// <param name="url"></param>
    /// <param name="downFileList"></param>
    /// <returns></returns>
    private IEnumerator DownUpdataFile(string url, string localPath, List <AssetBundleManifestData> downFileList)
    {
        for (int i = 0; i < downFileList.Count; i++)
        {
            AssetBundleManifestData data    = downFileList[i];
            UnityWebRequest         request = UnityWebRequest.Get(url + data.fileName);
            yield return(request.SendWebRequest());

            if (request.isHttpError || request.isNetworkError)
            {
                Debug.LogError(request.downloadHandler.text);
                Debug.LogError("下载AB文件时报错:" + data.fileName);
            }
            else
            {
                AssetBunildFileIO.SaveAssetBuildFile(localPath, data.fileName, request.downloadHandler.data);
                AssetBunildFileIO.SaveAssetBuildFile(localPath, data.manifestName, data.ToString());
            }
            request.Dispose();
        }
    }
コード例 #10
0
    private IEnumerator DownAB(string url, string path)
    {
        UnityWebRequest request = UnityWebRequest.Get(url);

        yield return(request.SendWebRequest());

        if (request.isHttpError || request.isNetworkError)
        {
            Debug.Log(request.downloadHandler.text);
        }
        else
        {
            if (!File.Exists(path))
            {
                Directory.CreateDirectory(path);
            }

            Debug.Log(request.downloadHandler.text);
            File.WriteAllBytes(path + "/AAA", request.downloadHandler.data);
            string str = File.ReadAllText(path + "/AAA");
            AssetBundleManifestData abmd = new AssetBundleManifestData(str);
        }
    }
コード例 #11
0
 public static AssetBundleLoadOperation LoadLevelAsync(
     AssetBundleManifestData data,
     bool isAdditive)
 {
     return(AssetBundleManager.LoadLevelAsync(data.bundle, data.asset, isAdditive, data.manifest));
 }
コード例 #12
0
ファイル: Utils.cs プロジェクト: request-time-out/A-Scripts
 public static AudioSource Get(int voiceNo, AssetBundleManifestData data)
 {
     return(!Singleton <Manager.Voice> .IsInstance() ? (AudioSource)null : Singleton <Manager.Voice> .Instance.CreateCache(voiceNo, data));
 }
コード例 #13
0
 public AudioSource CreateCache(Manager.Sound.Type type, AssetBundleManifestData data)
 {
     return(this.CreateCache(type, data.bundle, data.asset, data.manifest));
 }
コード例 #14
0
    public IEnumerator Init()
    {
        Dictionary <string, AssetBundleManifestData> webList   = null;
        Dictionary <string, AssetBundleManifestData> localList = null;

        AssetBundleManifestData webMainManifest   = null;
        AssetBundleManifestData localMainManifest = null;

        Config.Init(target, url);



        //获取本地和服务器的MainManifest清单
        yield return(StartCoroutine(DownMainManifestFile(Config.WebFileMainManifest(), Config.MainManifestFileName(), (d) =>
        {
            webMainManifest = d;
        })));

        yield return(StartCoroutine(DownMainManifestFile(Config.LocalFileMainManifestUnityWebRequest(), Config.MainManifestFileName(), (d) =>
        {
            localMainManifest = d;
        })));

        //网上无MainManifest清单则退出下载程序
        if (webMainManifest.isNO)
        {
            Debug.LogError("网上无AB包!!!");
            yield break;
        }

        //本地无MainManifest清单则创建
        if (!localMainManifest.isNO)
        {
            if (webMainManifest.CRC == localMainManifest.CRC)
            {
                Debug.Log("本地为最新AB包,无需下载");
                yield break;
            }
        }



        //根据主MainManifest文件获取其他manifest清单
        yield return(StartCoroutine(DownAllManifestFile(Config.WebPath(), webMainManifest.abList.Keys.ToList(), (d) =>
        {
            webList = d;
        })));

        yield return
            (StartCoroutine(DownAllManifestFile(Config.LocalFileManifestUnityWebRequest(), localMainManifest.abList.Keys.ToList(),
                                                (d) =>
        {
            localList = d;
        })));



        ///检验获取下载项
        //获取需要下载的列表
        List <AssetBundleManifestData> downList = new List <AssetBundleManifestData>();


        List <string> keys = webList.Keys.ToList();

        for (int i = 0; i < keys.Count; i++)
        {
            string key = keys[i];
            if (webList[key].isNO)
            {
                Debug.LogError("服务器上文件出现问题:" + key);
                continue;
            }

            if (localList.ContainsKey(key))
            {
                if (webList[key].CRC != localList[key].CRC)
                {
                    downList.Add(webList[key]);
                }
                localList.Remove(key);
            }
            else
            {
                downList.Add(webList[key]);
            }
        }

        //根据下载清单 下载并保存清单文件与ab文件
        yield return(StartCoroutine(DownUpdataFile(Config.WebPath(), Config.LocalPath(), downList)));



        //下载文件
        //获取且删除本地无用文件
        List <AssetBundleManifestData> deleteList = localList.Values.ToList();

        for (int i = 0; i < deleteList.Count; i++)
        {
            if (!deleteList[i].isNO)
            {
                AssetBunildFileIO.DeleteABManifest(Config.LocalPath(), deleteList[i].fileName);
            }
        }



        //覆盖本地主清单文件,表示下载完成
        AssetBunildFileIO.SaveAssetBuildFile(Config.LocalPath(), Config.MainManifestFileName(),
                                             webMainManifest.ToString());


        Debug.Log("下载完成");
    }
コード例 #15
0
ファイル: Bikeshed.cs プロジェクト: snowdream1985/Patchwork
 public static AssetBundleLoadAssetOperation LoadAsset(AssetBundleManifestData data, Type type)
 {
     return(LoadAsset(data.bundle, data.asset, type, data.manifest));
 }
コード例 #16
0
 public AudioSource CreateCache(int voiceNo, AssetBundleManifestData data)
 {
     return(this.CreateCache(voiceNo, data.bundle, data.asset, data.manifest));
 }
コード例 #17
0
ファイル: Utils.cs プロジェクト: request-time-out/A-Scripts
 public static AudioSource Get(Manager.Sound.Type type, AssetBundleManifestData data)
 {
     return(!Singleton <Manager.Sound> .IsInstance() ? (AudioSource)null : Singleton <Manager.Sound> .Instance.CreateCache(type, data));
 }
コード例 #18
0
 public static AssetBundleLoadAssetOperation LoadAllAssetAsync(
     AssetBundleManifestData data,
     System.Type type)
 {
     return(AssetBundleManager.LoadAllAssetAsync(data.bundle, type, data.manifest));
 }