You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
1.8 KiB
C#
76 lines
1.8 KiB
C#
4 days ago
|
using UnityEngine;
|
||
|
using UnityEngine.UI;
|
||
|
using System.Collections;
|
||
|
|
||
|
public class ScreenHit : MonoBehaviour
|
||
|
{
|
||
|
public static ScreenHit Instance { get; private set; } // Singleton instance
|
||
|
|
||
|
private Image hitImage;
|
||
|
private Coroutine fadeCoroutine;
|
||
|
public float fadeDuration = 0.3f; // Time to fade in and out
|
||
|
|
||
|
private void Awake()
|
||
|
{
|
||
|
if (Instance == null)
|
||
|
{
|
||
|
Instance = this;
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
Destroy(gameObject);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
hitImage = GetComponent<Image>();
|
||
|
|
||
|
if (hitImage == null)
|
||
|
{
|
||
|
Debug.LogError("[ScreenHit] No Image component found! Make sure it's attached to a UI Image.");
|
||
|
}
|
||
|
|
||
|
// Start fully transparent
|
||
|
Color color = hitImage.color;
|
||
|
color.a = 0;
|
||
|
hitImage.color = color;
|
||
|
}
|
||
|
|
||
|
public void ShowHitEffect()
|
||
|
{
|
||
|
if (fadeCoroutine != null)
|
||
|
{
|
||
|
StopCoroutine(fadeCoroutine);
|
||
|
}
|
||
|
fadeCoroutine = StartCoroutine(FadeEffect());
|
||
|
}
|
||
|
|
||
|
private IEnumerator FadeEffect()
|
||
|
{
|
||
|
float halfDuration = fadeDuration / 2f;
|
||
|
Color color = hitImage.color;
|
||
|
|
||
|
// Fade in
|
||
|
float elapsed = 0f;
|
||
|
while (elapsed < halfDuration)
|
||
|
{
|
||
|
color.a = Mathf.Lerp(0, 1, elapsed / halfDuration);
|
||
|
hitImage.color = color;
|
||
|
elapsed += Time.deltaTime;
|
||
|
yield return null;
|
||
|
}
|
||
|
|
||
|
// Fade out
|
||
|
elapsed = 0f;
|
||
|
while (elapsed < halfDuration)
|
||
|
{
|
||
|
color.a = Mathf.Lerp(1, 0, elapsed / halfDuration);
|
||
|
hitImage.color = color;
|
||
|
elapsed += Time.deltaTime;
|
||
|
yield return null;
|
||
|
}
|
||
|
|
||
|
color.a = 0; // Fully transparent
|
||
|
hitImage.color = color;
|
||
|
}
|
||
|
}
|