/// <summary> /// 初始化 /// </summary> public IEnumerator Init() { // 开始不停的回收资源 Coroutine.DispatchService(RecycleDaemon()); // 载入版本控制文件 yield return(Coroutine.DispatchService(VersionMgr.LoadVersionFile())); // 尝试解压资源, 如果是第一次启动游戏则需要将附在包体中的资源 yield return(Coroutine.DispatchService(ResourceMgr.Instance.DoDecompressRes())); // 抛出开始下载资源事件 //LoadingMgr.ChangeState(ResourceLoadingConst.LOAD_TYPE_UPDATE, ResourceLoadingStateConst.LOAD_STATE_CHECK); // 初始化版本控制 yield return(Coroutine.DispatchService(VersionMgr.CompareOnlineVersion())); // 如果下载的大小大于20M,并且在非wifi情况下,给提示 if (VersionMgr.DownloadSize >= 20 * 1024 * 1024 && Application.internetReachability != NetworkReachability.ReachableViaLocalAreaNetwork) { bool isConfirmed = false; // 可选择更新或者是不更新,不更新直接关闭客户端 //DialogMgr.ShowSimpleDailog(new CallBack((para, obj) => //{ // if ((bool)obj[0]) // isConfirmed = true; // else // // 关闭客户端 // Application.Quit(); //}), // string.Format(LocalizationMgr.Get("ResourceLoadingWnd_7", LocalizationConst.START), VersionMgr.DownloadSize/(1024*1024)), // LocalizationMgr.Get("ResourceLoadingWnd_6", LocalizationConst.START), // LocalizationMgr.Get("ResourceLoadingWnd_8", LocalizationConst.START)); while (!isConfirmed) { yield return(null); } } // 下载所有需要更新的资源 yield return(Coroutine.DispatchService(UpdateAllResources())); // 等待资源更新完成 while (!isUpdateResOk) { yield return(null); } // 执行更新结束处理 yield return(Coroutine.DispatchService(VersionMgr.DoSycnResEnd(true))); // 载入AssetBundle依赖关系 yield return(Coroutine.DispatchService(LoadAssetBundleManifest())); yield return(null); }
/// <summary> /// 尝试解压资源, 如果是第一次启动游戏则需要将附在包体中的资源 /// 所有随包资源配置在patch_res中 /// 具体配置格式patch_res={1.7z|2.7z...} /// </summary> /// <returns>The daemon.</returns> public IEnumerator DoDecompressRes() { //// 抛出开始解压包体中资源事件 //LoadingMgr.ChangeState(ResourceLoadingConst.LOAD_TYPE_START_DECOMPRESS, ResourceLoadingStateConst.LOAD_STATE_CHECK); //// 获取需要解压缩资源列表 //// 如果没有随包资源,不处理 //string[] patchRes = ConfigMgr.Get<string[]>("patch_res", new string[]{}); //if (patchRes.Length == 0) // yield break; //// 对比随包版本文件和本地资源版本文件对比判断需要解压具体那些资源 //yield return Coroutine.DispatchService(VersionMgr.ComparePackageVersion(patchRes)); //// 如果不需要解压缩不处理 //if (VersionMgr.UpdateResDict.Count == 0) // yield break; //// 抛出开始解压包体中资源事件 //LoadingMgr.ChangeState(ResourceLoadingConst.LOAD_TYPE_START_DECOMPRESS, ResourceLoadingStateConst.LOAD_STATE_UPDATE); //int unzipSize = 0; //string targetPath = ConfigMgr.ASSETBUNDLES_PATH + "/"; //// 获取版本需要更新列表 //foreach(string file in VersionMgr.UpdateResDict.Keys) //{ // // 构建解压缩 // Unzip zip = new Unzip(ConfigMgr.GetStreamingPathWWW(file), targetPath, VersionMgr.UpdateResDict[file]); // // 开始解压缩 // zip.Start(); // // 等待解压缩结束 // while (! zip.IsUnziped) // { // // 更新进度 // LoadingMgr.SetProgress((float) (unzipSize + zip.UnzipBytes) / VersionMgr.UnzipSize); // yield return null; // } // // 释放zip // zip.Clear(); // // 主动回收一下资源 // DoRecycleGC(); // // 如果解压缩失败 // /// 0 : 解压缩成功 // /// -1 : 压缩文件载入失败 // /// -2 : 内存分配失败 // /// -3 : 文件写入失败 // /// -4 : 其他异常信息 // if (zip.Error != 0) // { // string msg = string.Empty; // if (zip.Error == -1) // msg = string.Format(LocalizationMgr.Get("ResourceCheckWnd_21", LocalizationConst.START), file); // else if (zip.Error == -2) // msg = LocalizationMgr.Get("ResourceCheckWnd_22", LocalizationConst.START); // else if (zip.Error == -3) // msg = LocalizationMgr.Get("ResourceCheckWnd_8", LocalizationConst.START); // else // { // // 解压缩失败 // msg = string.Format(LocalizationMgr.Get("ResourceCheckWnd_23", LocalizationConst.START), file); // } // // 弹出窗口玩家让玩家确认一下,玩家确认后等待一下会在重试 // bool isConfirmed = false; // DialogMgr.ShowSimpleSingleBtnDailog(new CallBack((para, obj) => // { // isConfirmed = true; // }), msg); // // 等到玩家确认 // while (!isConfirmed) // yield return null; // // 退出游戏 // Application.Quit(); // yield break; // } // else // { // // 记录解压缩进度 // unzipSize += zip.UnzipBytes; // // 更新本地版本文件 // VersionMgr.SyncVersion(VersionMgr.UpdateResDict[file]); // // 更新进度 // LoadingMgr.SetProgress((float)unzipSize / VersionMgr.UnzipSize); // } //} //// 更新进度解压缩进度 //LoadingMgr.SetProgress(1f); //// 等待进度条结束 //while(!LoadingMgr.IsLoadingEnd(LoadingType.LOAD_TYPE_UPDATE_RES, // ResourceLoadingConst.LOAD_TYPE_START_DECOMPRESS)) // yield return null; // 写入版本文件 yield return(Coroutine.DispatchService(VersionMgr.DoSycnResEnd(false))); yield break; }