public static IEnumerator UncompressAssetBundles(System.Action<bool> onFinish){ GameObject LoadingEffect = Instantiate((GameObject)Resources.Load("UI/AssetUncompressLoading"), Vector3.zero, Quaternion.identity); LinearProgressIndicator ProgressSlider = LoadingEffect.transform.Find("Progress").GetComponent<LinearProgressIndicator>(); Text assetText = LoadingEffect.transform.Find("Text").GetComponent<Text>(); string[] assetBundlesToUncompress = assetBundleManifest.GetAllAssetBundles(); for (int i = 0; i < assetBundlesToUncompress.Length;i++){ assetText.text = string.Format("Uncompress game assets. Progress{0}/{1} Current{2}", i, assetBundlesToUncompress.Length, assetBundlesToUncompress[i]); if (assetBundlesToUncompress[i].Contains("master")) continue; WWW www = new WWW(GetStreamingAssetsPath() + assetBundlesToUncompress[i]); while(!www.isDone){ ProgressSlider.SetProgress(www.progress,true); yield return new WaitForEndOfFrame(); } if(string.IsNullOrEmpty(www.error)){ System.IO.File.WriteAllBytes(GetUncompressAssetsPath()+assetBundlesToUncompress[i],www.bytes); }else{ DialogManager.ShowAlert(string.Format("Uncompress assets failed Reason{0} Please contact the developer for further detial.",www.error),"Critical Error",MaterialIconHelper.GetIcon(MaterialIconEnum.ERROR)); onFinish(false); yield break; } www.Dispose(); } Destroy(LoadingEffect); onFinish(true); yield break; }
protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.activityUnlock); Window.SetSoftInputMode(SoftInput.AdjustResize); SetResult(Result.Canceled); _preferences = new PreferenceWrapper(this); _unlockLayout = FindViewById <LinearLayout>(Resource.Id.layoutUnlock); _progressIndicator = FindViewById <LinearProgressIndicator>(Resource.Id.progressIndicator); _passwordLayout = FindViewById <TextInputLayout>(Resource.Id.editPasswordLayout); _passwordText = FindViewById <TextInputEditText>(Resource.Id.editPassword); TextInputUtil.EnableAutoErrorClear(_passwordLayout); _passwordText.EditorAction += (_, e) => { if (e.ActionId == ImeAction.Done) { OnUnlockButtonClick(null, null); } }; _unlockButton = FindViewById <MaterialButton>(Resource.Id.buttonUnlock); _unlockButton.Click += OnUnlockButtonClick; if (_preferences.AllowBiometrics) { var biometricManager = BiometricManager.From(this); _canUseBiometrics = biometricManager.CanAuthenticate(BiometricManager.Authenticators.BiometricStrong) == BiometricManager.BiometricSuccess; } _useBiometricsButton = FindViewById <MaterialButton>(Resource.Id.buttonUseBiometrics); _useBiometricsButton.Enabled = _canUseBiometrics; _useBiometricsButton.Click += delegate { ShowBiometricPrompt(); }; if (_canUseBiometrics) { ShowBiometricPrompt(); } else { FocusPasswordText(); } }
public static IEnumerator RequestScene(bool InBuilt, bool Cooked, string SceneName, System.Action <bool> SceneBaseLoadFinish = null, System.Action <bool> SceneLoadFinish = null, string CustomMapUrl = null) { #if ClientCode GameObject LoadingEffect = (GameObject)Instantiate((GameObject)Resources.Load("UI/LoadingEffect"), Vector3.zero, Quaternion.identity); LinearProgressIndicator ProgressSlider = LoadingEffect.transform.Find("Progress").GetComponent <LinearProgressIndicator>(); ProgressSlider.SetProgress(0); DontDestroyOnLoad(LoadingEffect); #endif AudioListener.volume = 0; List <string> ReleaseAssets = new List <string>(); foreach (string Key in AssetBundleManager.LoadedAssets.Keys) { ReleaseAssets.Add(Key); } foreach (string key in ReleaseAssets) { if (AssetBundleManager.LoadedAssets [key] != null) { AssetBundleManager.LoadedAssets [key].Unload(true); } AssetBundleManager.LoadedAssets.Remove(key); } LoadedAssets = new Dictionary <string, AssetBundle> (); Resources.UnloadUnusedAssets(); #if ClientCode ProgressSlider.SetProgress(0.25f); #endif AsyncOperation Asyn = SceneManager.LoadSceneAsync("PoolScene"); yield return(Asyn); #if ClientCode ProgressSlider.SetProgress(0.1f); #endif TankInitSystem[] Vehicles = GameObject.FindObjectsOfType <TankInitSystem> (); for (int i = 0; i < Vehicles.Length; i++) { while (Vehicles [i] != null && Vehicles[i].isAssetBundleLoaded == false) { yield return(new WaitForEndOfFrame()); } } #if ClientCode ProgressSlider.SetProgress(0.95f); #endif if (Cooked) { AsyncOperation LoadSceneOperation = SceneManager.LoadSceneAsync(SceneName + "_Cooked"); yield return(LoadSceneOperation); Asyn = SceneManager.LoadSceneAsync("LoadScenePreparation", LoadSceneMode.Additive); yield return(Asyn); if (SceneBaseLoadFinish != null) { SceneBaseLoadFinish(true); } #if ClientCode if (RenderSettings.skybox != null) { RenderSettings.skybox.shader = Shader.Find(RenderSettings.skybox.shader.name); } #endif SceneAssetPrefab[] Sceneassets = GameObject.FindObjectsOfType <SceneAssetPrefab> (); #if ClientCode ProgressSlider.SetProgress(0, false); #endif int loadedAssetsCount = 0; for (int i = 0; i < Sceneassets.Length; i++) { #if ClientCode ProgressSlider.SetProgress((float)i / (float)Sceneassets.Length, true); #endif Sceneassets [i].inLoading = true; Sceneassets [i].LoadAsset(); Sceneassets[i].onFinish = () => { loadedAssetsCount += 1; }; } while (loadedAssetsCount != Sceneassets.Length) { #if ClientCode ProgressSlider.SetProgress((float)loadedAssetsCount / (float)Sceneassets.Length, true); #endif yield return(new WaitForEndOfFrame()); } #if ServerSide if (GameNetwork.ServerDisShowModel) { yield return(new WaitForSeconds(1)); Canvas[] uis = GameObject.FindObjectsOfType <Canvas>(); foreach (Canvas ui in uis) { DestroyImmediate(ui.gameObject, true); } ParticleSystem[] particleSystems = GameObject.FindObjectsOfType <ParticleSystem>(); foreach (ParticleSystem particleSystem in particleSystems) { if (particleSystem != null) { DestroyImmediate(particleSystem.gameObject, true); } } SpriteRenderer[] Sprites = GameObject.FindObjectsOfType <SpriteRenderer>(); foreach (SpriteRenderer sprite in Sprites) { DestroyImmediate(sprite.gameObject, true); } MeshRenderer[] meshRenderers = GameObject.FindObjectsOfType <MeshRenderer>(); foreach (MeshRenderer meshRenderer in meshRenderers) { DestroyImmediate(meshRenderer, true); } MeshFilter[] meshFilters = GameObject.FindObjectsOfType <MeshFilter>(); foreach (MeshFilter meshFilter in meshFilters) { DestroyImmediate(meshFilter, true); } Terrain[] terrains = GameObject.FindObjectsOfType <Terrain> (); foreach (Terrain terrain in terrains) { Destroy(terrain); } } #endif } else if (InBuilt) { Asyn = SceneManager.LoadSceneAsync(SceneName); yield return(Asyn); } else if (!InBuilt) { WWW www = new WWW(CustomMapUrl); yield return(www); //www.assetBundle.LoadAllAssets (); Asyn = SceneManager.LoadSceneAsync(System.IO.Path.GetFileNameWithoutExtension(www.assetBundle.GetAllScenePaths()[0])); yield return(Asyn); RenderSettings.skybox.shader = Shader.Find(RenderSettings.skybox.shader.name); foreach (MeshRenderer meshRenderer in GameObject.FindObjectsOfType <MeshRenderer>()) { foreach (Material material in meshRenderer.sharedMaterials) { material.shader = Shader.Find(material.shader.name); } } www.Dispose(); } #if ClientCode Destroy(LoadingEffect); Instantiate(Resources.Load("ResourcePrefab/Skidmarks")); #endif if (SceneLoadFinish != null) { SceneLoadFinish(true); } AudioListener.volume = 1; Resources.UnloadUnusedAssets(); }