66 lines
1.9 KiB
C#
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)); // 控制显示的速度
|
|
}
|
|
}
|
|
}
|