Files
Ultimate-Fishing-Simulator-…/Assets/Scripts/Assembly-CSharp/Michsky/UI/Heat/ImagePulse.cs
2026-03-04 09:37:33 +08:00

78 lines
2.3 KiB
C#

using System.Collections;
using UnityEngine;
using UnityEngine.UI;
namespace Michsky.UI.Heat
{
[AddComponentMenu("Heat UI/Animation/Image Pulse")]
public class ImagePulse : MonoBehaviour
{
[Header("Resources")]
[SerializeField]
private Image targetImage;
[Header("Color")]
[Range(0f, 1f)]
public float minAlpha = 0.25f;
[Range(0f, 1f)]
public float maxAlpha = 1f;
[Header("Animation")]
[Range(0.5f, 10f)]
public float pulseSpeed = 1f;
[SerializeField]
private AnimationCurve pulseCurve = new AnimationCurve(new Keyframe(0f, 0f), new Keyframe(1f, 1f));
private void OnEnable()
{
StartPulse();
}
public void StartPulse()
{
if (!base.gameObject.activeSelf)
{
base.gameObject.SetActive(value: true);
}
if (targetImage == null)
{
targetImage = GetComponent<Image>();
}
targetImage.color = new Color(targetImage.color.r, targetImage.color.g, targetImage.color.b, minAlpha);
StopCoroutine("PulseInAnimation");
StopCoroutine("PulseOutAnimation");
StartCoroutine("PulseInAnimation");
}
private IEnumerator PulseInAnimation()
{
float elapsedTime = 0f;
targetImage.color = new Color(targetImage.color.r, targetImage.color.g, targetImage.color.b, minAlpha);
while (targetImage.color.a < maxAlpha)
{
elapsedTime += Time.unscaledDeltaTime;
targetImage.color = new Color(targetImage.color.r, targetImage.color.g, targetImage.color.b, Mathf.Lerp(minAlpha, maxAlpha, pulseCurve.Evaluate(elapsedTime * pulseSpeed)));
yield return null;
}
targetImage.color = new Color(targetImage.color.r, targetImage.color.g, targetImage.color.b, maxAlpha);
StartCoroutine("PulseOutAnimation");
}
private IEnumerator PulseOutAnimation()
{
float elapsedTime = 0f;
targetImage.color = new Color(targetImage.color.r, targetImage.color.g, targetImage.color.b, maxAlpha);
while (targetImage.color.a > minAlpha)
{
elapsedTime += Time.unscaledDeltaTime;
targetImage.color = new Color(targetImage.color.r, targetImage.color.g, targetImage.color.b, Mathf.Lerp(maxAlpha, minAlpha, pulseCurve.Evaluate(elapsedTime * pulseSpeed)));
yield return null;
}
targetImage.color = new Color(targetImage.color.r, targetImage.color.g, targetImage.color.b, minAlpha);
StartCoroutine("PulseInAnimation");
}
}
}