Exemple #1
0
        /// <summary>
        /// 进入状态
        /// </summary>
        /// <param name="param"></param>
        public override void OnEnter(Param param = null)
        {
            base.OnEnter(param);

            // 选择沙盒路径还是流式路径
            bool sandbox = App.version.Equals(Util.GetString(Const.SANDBOX_VERSION));

            AssetManager.instance.url = sandbox ? App.persistentDataPath : App.streamingAssetsPath;
            // 获取清单文件
            AsyncAsset asset = AssetManager.instance.AssetBundleLoad(AssetManager.instance.url + Const.MANIFESTFILE);

            if (asset != null && string.IsNullOrEmpty(asset.error))
            {
                App.manifest = JsonReader.Deserialize <ManifestConfig>(asset.mainAsset.ToString());
                AssetManager.instance.setDependentAsset = App.manifest.GetDependencies;
                AssetManager.instance.UnloadAssets(asset, true);
            }
            // 语言配置
            asset = AssetManager.instance.Load(Const.LANG_FILE, (bResult, obj) => {
                if (bResult && obj != null)
                {
                    ConfigManager.instance.langConfig.Init(obj.ToString());
                    AssetManager.instance.UnloadAssets(asset, true);
                }
            }, async: false);
            // 加载Loading界面
            UIManager.instance.OpenUI(Const.UI_LOADING, Param.Create(new object[] {
                UILoading.TEXT_TIPS, ConfigManager.GetLang("Asset_Request"), UILoading.SLIDER, 0F, UILoading.TEXT_DETAILS, string.Empty
            }));
            // 检测网络是否开启
            InternetReachability();
        }
        /// <summary>
        /// 进入状态
        /// </summary>
        /// <param name="param"></param>
        public override void OnEnter(Param param = null)
        {
            base.OnEnter(param);

            AssetManager.instance.UnloadAssets(true);
            // 获取清单文件
            AsyncAsset asset = AssetManager.instance.AssetBundleLoad(AssetManager.instance.url + Const.MANIFESTFILE);

            if (asset != null && string.IsNullOrEmpty(asset.error))
            {
                App.manifest = JsonReader.Deserialize <ManifestConfig>(asset.mainAsset.ToString());
                AssetManager.instance.setDependentAsset = App.manifest.GetDependencies;
                AssetManager.instance.UnloadAssets(asset, true);
            }

            // 加载Loading界面
            UIManager.instance.Clear();
            UIManager.instance.OpenUI(Const.UI_LOADING, Param.Create(new object[] {
                UILoading.TEXT_TIPS, ConfigManager.GetLang("Asset_Loading"), UILoading.SLIDER, 0F, UILoading.TEXT_DETAILS, string.Empty
            }), immediate: true);

            // 延迟启动Lua避免卡顿
            Schedule.instance.ScheduleOnce(0.03F, () => {
                Lua instance = Lua.instance;
            });
        }
Exemple #3
0
        private IEnumerator InitBiomes()
        {
            AsyncAsset json = AssetManager.Instance.LoadAsset <TextAsset>(m_BiomeTableJson);

            yield return(json);

            m_Biomes = JsonConvert.DeserializeObject <BiomeData[]>(json.GetAssetAs <TextAsset>().text);
            AssetManager.Instance.UnloadAsset(json);

            m_BiomeMap = new Dictionary <string, BiomeData>(m_Biomes.Length);

            for (int i = 0; i < m_Biomes.Length; i++)
            {
                BiomeData biome = m_Biomes[i];
                m_BiomeMap.Add(biome.InternalName, biome);
            }
        }
        public IEnumerator Initialize()
        {
            m_LuaEnv = new LuaEnv();
            m_LuaEnv.AddLoader(LoadLuaFile);
            m_LuaFileAssets = new List <AsyncAsset>();
            m_LuaFileMap    = new Dictionary <string, LuaAsset>();

            for (int i = 0; i < m_LuaAssetBundles.Length; i++)
            {
                m_LuaFileAssets.AddRange(AssetManager.Instance.LoadAllAssets(m_LuaAssetBundles[i]));
            }

            yield return(AsyncAsset.WaitAll(m_LuaFileAssets));

            for (int i = 0; i < m_LuaFileAssets.Count; i++)
            {
                AsyncAsset asset = m_LuaFileAssets[i];
                m_LuaFileMap.Add(asset.AssetName, asset.GetAssetAs <LuaAsset>());
            }
        }
        /// <summary>
        /// 开始资源加载
        /// </summary>
        private void StartAssetLoad()
        {
            // 加载配置
            ConfigManager.instance.Init();
            foreach (var data in ConfigManager.instance.loadList)
            {
                AsyncAsset async = AssetManager.instance.AssetBundleAsyncLoad(AssetManager.instance.url + data.Key, (bResult, asset) =>
                {
                    if (bResult)
                    {
                        data.Value(asset.mainAsset.ToString());
                    }
                    else
                    {
                        Debugger.LogError(asset.error);
                    }
                    m_currentSize += (float)asset.userData;
                    m_async.Remove(asset);
                }, dependence: false);
                async.userData = 1F;
                m_size        += (float)async.userData;
                m_async.Add(async);
            }

            if (m_async.Count > 0)
            {
                // 记录是否资源加载中
                m_state = AssetState.Loading;
                m_time  = Time.realtimeSinceStartup;
            }
            else
            {
                m_state = AssetState.Complete;
                AssetLoadComplete();
            }
        }
Exemple #6
0
        /// <summary>
        /// 进入状态
        /// </summary>
        /// <param name="param"></param>
        public override void OnEnter(Param param = null)
        {
            base.OnEnter(param);

            AssetManager.instance.url = App.persistentDataPath;
            // 加载Loading界面
            AssetManager.instance.UnloadAssets(true);
            UIManager.instance.Clear();
            UIManager.instance.OpenUI(Const.UI_LOADING, Param.Create(new object[] {
                UILoading.TEXT_TIPS, ConfigManager.GetLang("Asset_Request"), UILoading.SLIDER, 0F, UILoading.TEXT_DETAILS, string.Empty
            }), immediate: true);
            // 获取本地更新清单文件
            AsyncAsset async = AssetManager.instance.AssetBundleLoad(AssetManager.instance.url + Const.UPDATE_FILE);

            if (async != null && string.IsNullOrEmpty(async.error))
            {
                m_localUpdateManifest    = JsonReader.Deserialize <ManifestConfig>(async.mainAsset.ToString());
                m_localUpdateManifestMD5 = Util.GetMD5(async.bytes);
                AssetManager.instance.UnloadAssets(async, true);
            }

            // 获取远程更新清单文件
            m_www = new WWW(Path.Combine(Path.Combine(App.cdn + App.platform, string.Format(Const.REMOTE_DIRECTORY, App.version)), Const.UPDATE_FILE));
        }
Exemple #7
0
        /// <summary>
        /// 进入状态
        /// </summary>
        /// <param name="param"></param>
        public override void OnEnter(Param param = null)
        {
            base.OnEnter(param);

            // 是否需要解压资源到沙河路径
            m_assetDecompressing = !App.version.Equals(Util.GetString(Const.SANDBOX_VERSION));
            if (m_assetDecompressing)
            {
                // 清空文件夹,以便重新解压
                if (Directory.Exists(Application.persistentDataPath))
                {
                    Directory.Delete(Application.persistentDataPath, true);
                }
                // 解压准备
                m_async.Clear();
                AsyncAsset async = AssetManager.instance.AssetBundleAsyncLoad(AssetManager.instance.url + 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 App.manifest.data.Values)
                {
                    async = AssetManager.instance.AssetBundleAsyncLoad(AssetManager.instance.url + 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(AssetManager.instance.url + 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_time = Time.realtimeSinceStartup;
            }
            else
            {
                StateMachine.instance.OnEnter(new AssetUpdate());
            }
        }
Exemple #8
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();
            }
        }