DRHPS/code-csharp/en_US/UI_LoadingIcon.cs
2025-04-08 11:31:35 +08:00

68 lines
1.8 KiB
C#

using System.Collections;
using UnityEngine;
using UnityEngine.UI;
public class UI_LoadingIcon : MonoBehaviour
{
[SerializeField]
private RawImage loadingIcon;
[SerializeField]
private float fadeSpeed = 2f;
private float targetOpacity;
private Coroutine fadeCoroutine;
public static UI_LoadingIcon Instance { get; private set; }
private void Awake()
{
if (Instance != null && Instance != this)
{
Object.Destroy(base.gameObject);
return;
}
Instance = this;
Object.DontDestroyOnLoad(base.gameObject);
}
public static void ToggleLoadingIcon(bool showIcon)
{
if (Instance == null)
{
Debug.LogError("UI_LoadingIcon instance is not set. Make sure it's added to the scene.");
}
else if (Instance.loadingIcon != null)
{
Instance.SetTargetOpacity(showIcon ? 1f : 0f);
}
else
{
Debug.LogError("LoadingIcon RawImage is not assigned in the UI_LoadingIcon.");
}
}
private void SetTargetOpacity(float opacity)
{
targetOpacity = opacity;
if (fadeCoroutine != null)
{
StopCoroutine(fadeCoroutine);
}
fadeCoroutine = StartCoroutine(FadeToTargetOpacity());
}
private IEnumerator FadeToTargetOpacity()
{
Color currentColor = loadingIcon.color;
while (!Mathf.Approximately(currentColor.a, targetOpacity))
{
currentColor.a = Mathf.MoveTowards(currentColor.a, targetOpacity, fadeSpeed * Time.deltaTime);
loadingIcon.color = currentColor;
yield return null;
}
fadeCoroutine = null;
}
}