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

67 lines
2.0 KiB
C#

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<CanvasGroup>();
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);
}
}