80 lines
2.3 KiB
C#
80 lines
2.3 KiB
C#
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
|
||
}
|
||
}
|