/// <summary> /// 开始资源更新 /// </summary> private void StartAssetUpdate() { bool hasAssetUpdate = false; // 更新 m_async.Clear(); if (m_remoteUpdateManifest.data.Count > 0) { // 最后一个更新清单文件是否下载 hasAssetUpdate = !m_localUpdateManifestMD5.Equals(m_remoteUpdateManifestMD5); if (hasAssetUpdate) { Action sure = () => { // 更新清单文件 AsyncAsset async = AssetManager.instance.AssetBundleAsyncLoad(Path.Combine(Path.Combine(App.cdn + App.platform, string.Format(Const.REMOTE_DIRECTORY, App.version)), Const.MANIFESTFILE), (bResult, asset) => { if (bResult) { Util.WriteAllBytes(App.assetPath + Const.MANIFESTFILE, asset.bytes); m_currentSize += (float)asset.userData; m_async.Remove(asset); } else { Debugger.LogError(asset.error); } }, dependence: false); async.userData = 0.5F; m_size += (float)async.userData; m_async.Add(async); // 更新其它文件 foreach (var data in m_remoteUpdateManifest.data.Values) { if (m_localUpdateManifest.Contains(data.name)) { if (m_localUpdateManifest.Get(data.name).MD5.Equals(data.MD5)) { continue; } else if (data.MD5.Equals(Util.GetMD5(App.assetPath + data.name))) { continue; } } async = AssetManager.instance.AssetBundleAsyncLoad(Path.Combine(Path.Combine(App.cdn + App.platform, string.Format(Const.REMOTE_DIRECTORY, App.version)), data.name), (bResult, asset) => { if (bResult) { Util.WriteAllBytes(App.assetPath + data.name, asset.bytes); m_currentSize += (float)asset.userData; m_async.Remove(asset); } else { Debugger.LogError(asset.error); } }, dependence: false); async.userData = data.size / 1024F; m_size += (float)async.userData; m_async.Add(async); } // 更新更新文件 async = AssetManager.instance.AssetBundleAsyncLoad(Path.Combine(Path.Combine(App.cdn + App.platform, string.Format(Const.REMOTE_DIRECTORY, App.version)), Const.UPDATE_FILE), (bResult, asset) => { if (bResult) { Util.WriteAllBytes(App.assetPath + Const.UPDATE_FILE, asset.bytes); m_currentSize += (float)asset.userData; m_async.Remove(asset); } else { Debugger.LogError(asset.error); } }, dependence: false); async.userData = 0.1F; m_size += (float)async.userData; m_async.Add(async); // 记录是否资源更新中 m_assetUpdating = true; m_time = Time.realtimeSinceStartup; }; Action close = () => { Application.Quit(); }; UIManager.instance.OpenUI(Const.UI_NORMAL_TIPS_BOX, Param.Create(new object[] { UINormalTipsBox.ACTION_SURE, sure, UINormalTipsBox.TEXT_CONTENT, ConfigManager.GetLang("Network_Invalid"), UINormalTipsBox.ACTION_CLOSE, close })); } } // 如果没有资源更新,就直接认为更新完成 if (!hasAssetUpdate) { AssetUpdateComplete(); } }