using UnityEngine; using System.Collections; public class ButtonController : MonoBehaviour { private CanvasGroup canvasGroup; // CanvasGroup do kontrolowania alfa Canvasu public float fadeSpeed = 2f; // Prędkość animacji wyświetlania i zanikania public float fadeOutDelay = 0.1f; // Czas opóźnienia przed wyłączeniem obiektu po zakończeniu animacji void Awake() { // Znajdź CanvasGroup na tym samym obiekcie canvasGroup = GetComponent(); if (canvasGroup == null) { Debug.LogError("CanvasGroup component not found! Make sure the object has a CanvasGroup component."); } } void OnEnable() { // Pokaż CanvasGroup, gdy obiekt jest włączany if (canvasGroup != null) { canvasGroup.alpha = 0f; // Ustaw alfa na 0 na starcie StartCoroutine(FadeCanvasGroup(canvasGroup, 1f)); } } void OnDisable() { // Rozpocznij animację zanikania, gdy obiekt jest wyłączany if (canvasGroup != null) { StartCoroutine(FadeOutAndDisable()); } } private IEnumerator FadeCanvasGroup(CanvasGroup canvasGroup, float targetAlpha) { canvasGroup.blocksRaycasts = targetAlpha == 1f; canvasGroup.interactable = targetAlpha == 1f; while (!Mathf.Approximately(canvasGroup.alpha, targetAlpha)) { canvasGroup.alpha = Mathf.MoveTowards(canvasGroup.alpha, targetAlpha, fadeSpeed * Time.deltaTime); yield return null; } // Dodatkowe ustawienia na końcu animacji canvasGroup.interactable = targetAlpha == 1f; canvasGroup.blocksRaycasts = targetAlpha == 1f; } private IEnumerator FadeOutAndDisable() { // Rozpocznij animację zanikania yield return StartCoroutine(FadeCanvasGroup(canvasGroup, 0f)); // Opóźnienie przed wyłączeniem obiektu yield return new WaitForSeconds(fadeOutDelay); // Wyłącz obiekt gameObject.SetActive(false); } }