Files
beyond/Assets/Scripts/UI/ImagePulser.cs
2024-11-20 15:21:28 +01:00

80 lines
2.3 KiB
C#
Raw Blame History

using Sirenix.OdinInspector;
using UnityEngine;
using UnityEngine.UI;
public class ImagePulser : MonoBehaviour
{
public float speed = 10f; // Pr<50>dko<6B><6F> pulsowania
public Color pulseColor = Color.white; // Kolor pulsowania
[Range(1.0f, 1.5f)] public float scaleAmount = 1.05f; // Publiczna zmienna do regulacji skali pulsowania
[SerializeField]
private Image[] images;
private Color originalColor = Color.white;
private Vector3 originalScale;
[SerializeField]
private bool pulsing = true;
private bool initialized = false;
void Awake()
{
if (images == null || images.Length == 0)
{
images = new Image[] {GetComponent<Image>()};
}
if (images[0] != null)
{
originalColor = images[0].color;
}
originalScale = transform.localScale; // Zapami<6D>tanie oryginalnej skali
initialized = true;
}
void Update()
{
if (pulsing && images[0] != null)
{
// Obliczanie warto<74>ci t do interpolacji mi<6D>dzy oryginalnym kolorem a kolorem pulsowania
float t = (Mathf.Sin(Time.unscaledTime * speed) + 1) / 2;
// Mieszanie oryginalnego koloru z kolorem pulsowania
Color blendedColor = Color.Lerp(originalColor, pulseColor, t);
// Mieszanie alfa dla efektu zanikania
float alpha = Mathf.Lerp(0f, originalColor.a, t);
blendedColor.a = alpha;
foreach (var im in images)
{
// Ustawienie koloru obrazu
if (im)
im.color = blendedColor;
}
// Skalowanie obiektu w zakresie od oryginalnej skali do maksymalnej skali
float scale = Mathf.Lerp(1f, scaleAmount, t);
transform.localScale = originalScale * scale;
}
}
[Button]
public void StartPulsing()
{
pulsing = true;
}
[Button]
public void StopPulsing()
{
if (!pulsing || !initialized)
return;
pulsing = false;
foreach (var im in images)
{
if (im != null)
im.color = originalColor;
}
transform.localScale = originalScale; // Przywr<77>cenie oryginalnej skali
}
}