废话不多说上代码,欢迎对 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;
}
}
}
标签:场景,进度条,Unity,progress,using,operation,public,加载
From: https://blog.csdn.net/qq_57101277/article/details/136990050