Cute_demon_attacks/meng_yao/Assets/script/loadingPanel.cs
2024-12-29 11:27:57 +08:00

66 lines
1.9 KiB
C#

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)); // 控制显示的速度
}
}
}