using System.Collections; using System.Collections.Generic; using Sirenix.OdinInspector; using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; public class AsyncLoad_Qiushi: MonoBehaviour { [Header("是否使用内置模式")] [SerializeField] private bool m_isUseBuiltinMode = true; [Header("基础熟悉设定")] [SerializeField] private Slider m_slider; /// /// 进度显示 /// [SerializeField] private Text m_ProgressTxt; /// /// 文字显示 /// [SerializeField] private Text m_txtDisplay; [SerializeField] private GameObject m_hintEffect; /// /// 加载速度 /// [SerializeField] private float m_loadingSpeed = 1; /// /// 是否开始执行 /// private bool m_isStart = false; /// /// 目标值 /// private float m_targetValue; /// /// 当前进度 /// private int m_currentProgress = 0; private AsyncOperation m_asyncOperation; /// /// 初始化 /// /// /// public void Init(string _sceneName, bool _isStart) { m_slider.value = 0; m_currentProgress = 0; m_isStart = false; if (m_isUseBuiltinMode) { if (_isStart) { StartCoroutine(AsyncLoadScene(_sceneName, _isStart)); } } else { StartCoroutine(LoadProgress(_sceneName)); } } #region 内置模式 IEnumerator AsyncLoadScene(string _name, bool _isStart) { m_asyncOperation = SceneManager.LoadSceneAsync(2, LoadSceneMode.Single); m_asyncOperation.allowSceneActivation = false; m_isStart = _isStart; yield return m_asyncOperation; } void FixedUpdate() { if (m_isStart) { Debug.Log("进入"); m_targetValue = m_asyncOperation.progress; if (m_asyncOperation.progress >= 0.9f) { m_targetValue = 1.0f; } if (m_targetValue != m_slider.value) { m_slider.value = Mathf.Lerp(m_slider.value, m_targetValue, Time.deltaTime * m_loadingSpeed); if (Mathf.Abs(m_slider.value - m_targetValue) < 0.01f) { m_slider.value = m_targetValue; } } m_ProgressTxt.text = ((int)(m_slider.value * 100)).ToString() + "%"; if ((int)(m_slider.value * 100) == 100) { m_isStart = false; m_asyncOperation.allowSceneActivation = true; } } } #endregion /// /// 平滑加载 /// /// private IEnumerator LoadProgress(string _name) { while (m_slider.value < 1f) { m_targetValue += m_loadingSpeed * Time.deltaTime; m_ProgressTxt.text = (int)(m_targetValue * 100) + "%"; m_slider.value = Mathf.Clamp01(m_targetValue); yield return null; } if (m_slider.value == 1) { SetSubsequentOperations(); SceneManager.LoadSceneAsync(_name); } } /// /// 设置模型状态 /// private void SetSubsequentOperations() { m_txtDisplay.text = "资源加载完成"; m_hintEffect.SetActive(false); } }