using Sirenix.OdinInspector; using UnityEngine; using UnityEngine.UI; public class ImagePulser : MonoBehaviour { public float speed = 10f; // Pr�dko�� 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()}; } if (images[0] != null) { originalColor = images[0].color; } originalScale = transform.localScale; // Zapami�tanie oryginalnej skali initialized = true; } void Update() { if (pulsing && images[0] != null) { // Obliczanie warto�ci t do interpolacji mi�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�cenie oryginalnej skali } }