67 lines
2.0 KiB
C#
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);
|
|
}
|
|
}
|