/// <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; }); }
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(); } }
/// <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)); }
/// <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()); } }
/// <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(); } }