unity异步加载场景过渡

    xiaoxiao2023-11-07  145

    #region MyRegion /* Author: Wilson * Description: 场景切换控制,硬切和异步加载 * Date: 2019.5.15 */ #endregion using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; /// <summary> /// 场景切换控制 /// </summary> public class LoadingControl : MonoBehaviour { public static LoadingControl instance; public string text; public GameObject LoadPanel; public Image bar; int currentProgress; int targetProgress; private void Awake() { DontDestroyOnLoad(gameObject); if (instance == null) { instance = this; } else { Destroy(gameObject); } } public void StartLoading(string scene) { LoadPanel.SetActive(true); currentProgress = 0; targetProgress = 0; StartCoroutine(LoadingScene(scene)); } /// <summary> /// Loading panel /// </summary> /// <param name="sceneNum"></param> /// <returns></returns> public IEnumerator LoadingScene(string sceneNum) { AsyncOperation asyncOperation = SceneManager.LoadSceneAsync(sceneNum); asyncOperation.allowSceneActivation = false; while (asyncOperation.progress < 0.9f) { targetProgress = (int)(asyncOperation.progress * 100); yield return LoadProgress(); } targetProgress = 100; yield return LoadProgress(); asyncOperation.allowSceneActivation = true; } private IEnumerator<WaitForEndOfFrame> LoadProgress() { while (currentProgress < targetProgress) { ++currentProgress; text = currentProgress.ToString() + "%"; bar.fillAmount = currentProgress / 100f; yield return new WaitForEndOfFrame(); } if (currentProgress >= 99) { LoadPanel.SetActive(false); } } }

     

    最新回复(0)