废话不多说上代码,欢迎对 Unity有兴趣的伙伴一起探讨学习。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using TMPro;// 创建一个名为JDT的MonoBehaviour脚本,它可以附加到游戏对象上并在Unity引擎中运行
public class JDT : MonoBehaviour
{// 公开游戏对象变量,用于加载画面的显示与隐藏public GameObject loadScreen;// 公开Slider组件变量,用于显示加载进度public Slider slider;// 公开TextMeshProUGUI文本组件变量,用于显示百分比数字public TextMeshProUGUI text;// 定义一个公共方法LoadNextLevel,当被调用时开始加载下一个场景public void LoadNextLevel(){// 开启一个协程LoadLevel,异步加载场景StartCoroutine(LoadLevel());}// 协程LoadLevel,用于异步加载场景并显示加载进度IEnumerator LoadLevel(){// 显示加载屏幕loadScreen.SetActive(true);// 获取当前激活场景的下一个场景的AsyncOperation对象AsyncOperation operation = SceneManager.LoadSceneAsync(SceneManager.GetActiveScene().buildIndex + 1);// 设置不允许立即激活场景,等待进度加载到一定程度后再激活operation.allowSceneActivation = false;// 循环直到加载操作完成while (!operation.isDone){// 规范化进度值,将其压缩到0到1之间float progress = Mathf.Clamp01(operation.progress / 0.9f);// 将标准化的进度值赋给slider组件slider.value = progress;// 更新文本组件,显示加载的百分比text.text = (progress * 100f).ToString("F0") + "%";// 当加载进度超过90%时,允许用户通过按键提前激活场景if (operation.progress >= 0.9f){slider.value = 1;// 检测键盘任意键按下if (Input.anyKeyDown){// 允许场景激活,这意味着即使加载未完成也可以进入下一个场景operation.allowSceneActivation = true;}}// 让协程暂停一帧,然后继续执行yield return null;}}
}