using UnityEngine; using UnityEngine.UI; using UnityEngine.SceneManagement; using System.Threading.Tasks; using DG.Tweening; using TMPro; using System.Collections; using Unity.VisualScripting; public class loadingPanel : MonoBehaviour { public Text targetText; // 需要显示动画的Text组件 public string fullText = "正在加载,请稍候..."; // 要显示的完整文本 public float typewriterDelay = 0.1f; // 打字机效果的间隔时间 public int SceneIndex; // 控制加载场景和动画之间的时间同步 async void Start() { // 调用加载场景和显示动画的方法 await LoadSceneWithTextAnimation(SceneIndex); } public async Task LoadSceneWithTextAnimation(int sceneBuildIndex) { // 启动文本动画任务 Task textAnimationTask = AnimateText(); // 异步加载场景 AsyncOperation asyncOperation = SceneManager.LoadSceneAsync(sceneBuildIndex); asyncOperation.allowSceneActivation = false; // 不自动激活场景 while (!asyncOperation.isDone) { // 根据加载进度更新UI float progress = asyncOperation.progress; // 更新文本内容,显示加载进度 targetText.text = $"{fullText} ({progress * 100:F0}%)"; // 当加载进度接近90%时,允许场景激活 if (progress >= 0.9f) { asyncOperation.allowSceneActivation = true; } // 每帧执行一次任务,让文本动画继续进行 await Task.Yield(); } // 等待文本动画结束(如果它还没有结束) await textAnimationTask; } // 执行逐字显示文本动画 private async Task AnimateText() { // 逐字显示文本 for (int i = 0; i < fullText.Length; i++) { targetText.text = fullText.Substring(0, i + 1); // 逐个字符地拼接显示文本 await Task.Delay((int)(typewriterDelay * 1000)); // 控制显示的速度 } } }