示例#1
0
    private IEnumerator IeLoadAsset(string resName, LoadderCallBack callBack, LoadderData data)
    {
        var boudleName = data == null ? resName : string.IsNullOrEmpty(data.assetBoudleName) ? resName : data.assetBoudleName;

        if (_objDic.ContainsKey(boudleName))
        {
            var resNames = resName.Split('/');
            if (callBack != null)
            {
                callBack(resName, _objDic[boudleName].LoadAsset(resNames[resNames.Length - 1]), data);
            }
            yield break;
        }

        resManagerState = ResManagerState.EAsyncLoadRes;
        if (_wwwList.Contains(boudleName))
        {
            yield return(new WaitWhile(() => _wwwList.Contains(boudleName)));

            if (_objDic.ContainsKey(boudleName))
            {
                var resNames = resName.Split('/');
                if (callBack != null)
                {
                    callBack(resName, _objDic[boudleName].LoadAsset(resNames[resNames.Length - 1]), data);
                }
                resManagerState = ResManagerState.EFree;
                yield break;
            }
        }

        _wwwList.Add(boudleName);

        yield return(LoadAllDependencies(boudleName));

        var objwww = WWW.LoadFromCacheOrDownload(string.Format("file://{0}{1}.unity3d", ResManager.LocalAssetbundlePath, boudleName), _manifest.GetAssetBundleHash(string.Format("{0}.unity3d", boudleName)), 0);

        yield return(objwww);

        if (!string.IsNullOrEmpty(objwww.error))
        {
            Debug.Log(objwww.error);
            if (callBack != null)
            {
                callBack(resName, null, data);
            }
        }
        else
        {
            _objDic.Add(boudleName, objwww.assetBundle);
            var resNames = resName.Split('/');
            var obj      = objwww.assetBundle.LoadAsset(resNames[resNames.Length - 1]);
            if (callBack != null)
            {
                callBack(resName, obj, data);
            }
        }
        _wwwList.Remove(boudleName);
        resManagerState = ResManagerState.EFree;
    }
示例#2
0
    public void Init(bool UseAssetBoudle = true, bool UpdateAssetBoudleVesion = true)
    {
        this.UseAssetBoudle          = UseAssetBoudle;
        this.UpdateAssetBoudleVesion = UpdateAssetBoudleVesion;
        init = !UseAssetBoudle;
        if (!UseAssetBoudle)
        {
            return;
        }
        var sabServerPath = string.Format("{0}{1}", ServerAssetbundleAbsPath, "AssetBundles");
        var sabLocalPath  = string.Format("{0}{1}", LocalAssetbundlePath, "AssetBundles");

        if (UpdateAssetBoudleVesion)
        {
            var fileInfo = new FileInfo(sabLocalPath);
            if (fileInfo.Exists)
            {
                fileInfo.Delete();
            }
        }

        resManagerState = ResManagerState.EDownABManifest;
        if (UpdateAssetBoudleVesion)
        {
            HttpManager.Instance.DownLoad(sabServerPath, sabLocalPath, OnDownLoadSAbCallBack);
        }
        else
        {
            OnDownLoadSAbCallBack(new HttpHelperRet(true, ""), null);
        }
    }
示例#3
0
 private void OnDownLoadSAbCallBack(HttpHelperRet ret, object data)
 {
     if (ret.isOk)
     {
         Game.Instance.StartCoroutine(CheckResVersion());
     }
     else
     {
         resManagerState = ResManagerState.EError;
         init            = true;
         if (GMManager.IsInEditor)
         {
             Debug.LogError(string.Format("{0}\nlog: {1}", ret.isOk, ret.log));
         }
     }
 }
示例#4
0
    private void OnDownLoadAbCallBack(HttpHelperRet ret, object data)
    {
        if (GMManager.IsInEditor)
        {
            Debug.Log("已下载: " + ret.isOk + " " + ret.log);
        }
        if (!HttpManager.Instance.DownLoadEnd())
        {
            return;
        }
        resManagerState = ResManagerState.EFree;
        var _cabPath = string.Format("{0}{1}", LocalAssetbundlePath, "AssetBundles_old");
        var _sabPath = string.Format("{0}{1}", LocalAssetbundlePath, "AssetBundles");
        var fileInfo = new FileInfo(_sabPath);

        fileInfo.CopyTo(_cabPath, true);
        init = true;
    }
示例#5
0
    private IEnumerator CheckResVersion()
    {
        resManagerState = ResManagerState.ECheckResVersion;
        var _cabPath    = string.Format("{0}{1}", LocalAssetbundlePath, "AssetBundles_old");
        var _sabPath    = string.Format("{0}{1}", LocalAssetbundlePath, "AssetBundles");
        var _cabwwwPath = string.Format("file://{0}", _cabPath);
        var _sabwwwPath = string.Format("file://{0}", _sabPath);

        if (!UpdateAssetBoudleVesion)
        {
            var fileInfo = new FileInfo(_sabPath);
            if (fileInfo.Exists)
            {
                fileInfo.CopyTo(_cabPath, true);
            }
            else
            {
                init = true;
                if (GMManager.IsInEditor)
                {
                    Debug.LogError(string.Format("load '{0}' err\nlog: '{0}' no here !", _sabPath));
                }
                yield break;
            }
        }

        AssetBundleManifest cabVersion = null;
        var updateList = new List <AssetBundleMotify>();

        var www = new WWW(_sabwwwPath);

        yield return(www);

        if (!string.IsNullOrEmpty(www.error))
        {
            init = true;
            if (GMManager.IsInEditor)
            {
                Debug.LogError(string.Format("load '{0}' err\nlog: {1}", _sabwwwPath, www.error));
            }
            yield break;
        }

        _manifest = www.assetBundle.LoadAsset("AssetBundleManifest") as AssetBundleManifest;
        if (_manifest == null)
        {
            Debug.LogError("_manifest null");
            yield break;
        }
        var sabBytes = www.bytes;

        www.assetBundle.Unload(false);
        www.Dispose();

        var cabJson = new FileInfo(_cabPath);

        if (cabJson.Exists)
        {
            www = new WWW(_cabwwwPath);
            yield return(www);

            if (!string.IsNullOrEmpty(www.error))
            {
                init = true;
                if (GMManager.IsInEditor)
                {
                    Debug.LogError(string.Format("load '{0}' err\nlog: {1}", _cabwwwPath, www.error));
                }
                yield break;
            }

            cabVersion = www.assetBundle.LoadAsset("AssetBundleManifest") as AssetBundleManifest;
            var cabBytes = www.bytes;
            www.assetBundle.Unload(false);
            www.Dispose();

            if (cabBytes.SequenceEqual(sabBytes))
            {
                resManagerState = ResManagerState.EFree;
                init            = true;
                if (GMManager.IsInEditor)
                {
                    Debug.Log("The same version!");
                }
                yield break;
            }
        }
        updateList.Clear();
        GetUpdateList(ref updateList, _manifest, cabVersion);

        if (GMManager.IsInEditor)
        {
            var log = "无更新资源!";
            if (updateList.Count > 0)
            {
                log = "需要更新以下资源:";
                foreach (var ab in updateList)
                {
                    if (ab.add)
                    {
                        log += "\n更新: " + ab.name;
                    }
                    else
                    {
                        log += "\n删除: " + ab.name;
                    }
                }
            }
            Debug.Log(log);
        }

        var delCount      = 0;
        var downloadCount = 0;

        resManagerState = ResManagerState.EUpdateAB;

        while (updateList.Count > 0)
        {
            var item = updateList[0];
            updateList.RemoveAt(0);
            if (item.add)
            {
                if (string.IsNullOrEmpty(item.name))
                {
                    continue;
                }
                downloadCount++;
                var sabServerPath = string.Format("{0}{1}", ServerAssetbundleAbsPath, item.name);
                var sabLocalPath  = string.Format("{0}{1}", LocalAssetbundlePath, item.name);
                var fileInfo      = new FileInfo(sabLocalPath);
                var mydir         = fileInfo.Directory;
                if (!mydir.Exists)
                {
                    mydir.Create();
                }
                HttpManager.Instance.DownLoad(sabServerPath, sabLocalPath, OnDownLoadAbCallBack);
            }
            else
            {
                delCount++;
                var filePath = string.Format("{0}{1}", LocalAssetbundlePath, item.name);
                var fileInfo = new FileInfo(filePath);
                if (fileInfo.Exists)
                {
                    fileInfo.Delete();
                }
            }
        }
        updateList = null;

        if (downloadCount == 0)
        {
            OnDownLoadAbCallBack(new HttpHelperRet(true, ""), null);
        }
    }