此场景还没完善,之后还会根据进度条的值改变颜色,或连个shadergraph,背景做个序列帧播放等等,不然显得太单调
废话不多,直接上干货。
效果如下,前面黑色闪一下的是转场黑幕。。。
代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
/*
*
* Writer:June
*
* Date: 2019.11.22
*
* Function:异步加载场景控制器
*
* Remarks:
*
*/
public class GameControllerLoding : MonoBehaviour
{
/// <summary>
/// 进度条上方文字
/// </summary>
public Text _progressText;
/// <summary>
/// 进度条
/// </summary>
public Slider _slider;
private void Start()
{
//开启协程
StartCoroutine(LoadSceneAsync());
}
/// <summary>
/// 异步加载
/// </summary>
/// <returns></returns>
IEnumerator LoadSceneAsync()
{
AsyncOperation async = SceneManager.LoadSceneAsync(2); //异步加载
async.allowSceneActivation = false; //禁止跳转
int slidervalue = 0;
while (true)
{
yield return null;
int asyncvalue = (int)(async.progress * 100); //注意获取到进度条的值为0-1
if (slidervalue < asyncvalue)
{
slidervalue++;
_slider.value = slidervalue / 100f; //slider.value的值是0-1
_progressText.text = slidervalue + "%"; //显示百分比进度数
}
if (slidervalue == asyncvalue && async.progress == 0.9f) //到达90%时
{
break;
}
}
//补剩余的10%
while (slidervalue < 100)
{
slidervalue++;
_slider.value = slidervalue / 100f;
_progressText.text = slidervalue + "%";
}
//提示
ShowTip();
while (true)
{
yield return null;
//按了按键或触摸屏幕任何位置后跳转
if (Input.anyKeyDown || Input.GetMouseButtonDown(0)) break;
}
//触摸或按键按下后 允许跳转
async.allowSceneActivation = true;
}
/// <summary>
/// 显示提示
/// </summary>
private void ShowTip()
{
_progressText.fontSize = 30;
_progressText.text = "按任意按键或触摸屏幕任何位置继续";
//动画队列 添加渐隐渐显效果 并设置动画曲线
Sequence _sequence = DOTween.Sequence();
_sequence.Append(_progressText.DOFade(0, 1f).SetEase(Ease.OutCubic));
_sequence.Append(_progressText.DOFade(1, 1f).SetEase(Ease.OutCubic));
//循环动画
_sequence.SetLoops(-1);
}
}