75 lines
2.5 KiB
C#
75 lines
2.5 KiB
C#
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.SceneManagement;
|
|
using UnityEngine.UI;
|
|
/********************************************************************************
|
|
*Create By CG
|
|
*Function 异步场景加载控制(有界面显示)
|
|
*********************************************************************************/
|
|
namespace CG.UTility
|
|
{
|
|
public class LoadScenesAsync : MonoBehaviour
|
|
{
|
|
private bool _isLoadScene;//是否加载场景
|
|
private AsyncOperation _async;
|
|
private int _toProgress = 0;//读取场景进度
|
|
private int _nowProgress = 0;//当前场景返回进度
|
|
[SerializeField]
|
|
private Slider _slider=null;//进度条
|
|
[SerializeField]
|
|
private Text _sliderTxt=null;//显示百分比
|
|
|
|
private System.Action _loadedCall = null;
|
|
private void Update()
|
|
{
|
|
if (_isLoadScene)
|
|
{
|
|
if (_async == null) return;
|
|
if (_async.progress < 0.9f)
|
|
{
|
|
_toProgress = (int)_async.progress * 100;
|
|
}
|
|
else
|
|
{
|
|
_toProgress = 100;
|
|
}
|
|
if (_nowProgress < _toProgress)
|
|
{
|
|
_nowProgress++;
|
|
}
|
|
_slider.value = _nowProgress / 100.0f;
|
|
_sliderTxt.text = _slider.value * 100 + "%";
|
|
if (_nowProgress == 100)
|
|
{
|
|
_isLoadScene = false;
|
|
_async.allowSceneActivation = true;
|
|
_loadedCall?.Invoke();
|
|
}
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// 加载场景主方法
|
|
/// </summary>
|
|
/// <param name="sceneName"></param>
|
|
public void LoadSceneAsync(string sceneName, System.Action LoadedCall)
|
|
{
|
|
_loadedCall = LoadedCall;
|
|
gameObject.SetActive(true);
|
|
_toProgress = 0;
|
|
_nowProgress = 0;
|
|
_isLoadScene = true;
|
|
StartCoroutine("LoadScene", sceneName);
|
|
}
|
|
|
|
private IEnumerator LoadScene(string sceneName)
|
|
{
|
|
yield return new WaitForEndOfFrame();//加上这句可以先让加载画面显示
|
|
_async = SceneManager.LoadSceneAsync(sceneName);
|
|
_async.allowSceneActivation = false;
|
|
yield return _async;
|
|
Destroy(gameObject);
|
|
}
|
|
}
|
|
}
|