Пример #1
0
        /// <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();
            }
        }