using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; public class UI_LoadingPanel : BasePanel { public Slider loadSlider; private float currentProgress = 0; public float targetProgress; public bool isLoading = false; public TextMeshProUGUI Slider_Text; public Sprite[] frames; // 将每一帧的Sprite图片依次拖入这个数组中 public float frameRate = 30f; // 每秒播放的帧数 private Image image; protected override void Awake() { base.Awake(); loadSlider = GetControl("loadSlider"); Slider_Text = GetControl("%"); image = GetControl("middleImage"); if (image == null) { Debug.LogError("Image component not found!"); } StartCoroutine(Animate()); } public override void ShowMe() { base.ShowMe(); loadSlider.value = 0; Slider_Text.text = "0%"; Debug.Log("UI_LoadingPanel ShowMe"); Bootstrap.Instance.eventCenter.AddEventListener(Enum_EventType.UpdateProgress, UpdateProgress); } public override void HideMe() { base.HideMe(); Debug.Log("UI_LoadingPanel HideMe"); Bootstrap.Instance.eventCenter.RemoveEventListener(Enum_EventType.UpdateProgress, UpdateProgress); } private void Update() { if (isLoading) { if (currentProgress < targetProgress) { currentProgress += Time.deltaTime; if (currentProgress >= targetProgress) currentProgress = targetProgress; loadSlider.value = currentProgress; // 将Slider的value(0~1)转为百分比(0%~100%) float percent = loadSlider.value * 100f; Slider_Text.text = Mathf.RoundToInt(percent) + "%"; } else { isLoading = false; Bootstrap.Instance.uiManager.HidePanel(); } } } private void UpdateProgress(float progress) { isLoading = true; targetProgress += progress; } private IEnumerator Animate() { for (int i = 0; i < frames.Length; i++) { image.sprite = frames[i]; yield return new WaitForSeconds(1f / frameRate); } // 你可以在这里添加循环播放的代码,或者在特定条件下停止动画 StartCoroutine(Animate()); // 循环播放 } }