using System.Collections; using UnityEngine; using UnityEngine.Tilemaps; public class TransparentDetection : MonoBehaviour { [Range(0, 1)] [SerializeField] private float transparencyAmount = 0.8f; // Desired transparency level [SerializeField] private float fadeTime = .4f; // Duration of the fade effect private SpriteRenderer spriteRenderer; // Reference to the SpriteRenderer component private Tilemap tilemap; // Reference to the Tilemap component private void Awake() { spriteRenderer = GetComponent(); // Initialize the SpriteRenderer reference tilemap = GetComponent(); // Initialize the Tilemap reference } private void OnTriggerEnter2D(Collider2D other) { if (other.gameObject.GetComponent()) // Check if the colliding object is a PlayerController { if (spriteRenderer) { if (gameObject.activeInHierarchy) { // Start fading the SpriteRenderer to the transparencyAmount StartCoroutine(FadeRoutine(spriteRenderer, fadeTime, spriteRenderer.color.a, transparencyAmount)); } } else if (tilemap) { if (gameObject.activeInHierarchy) { // Start fading the Tilemap to the transparencyAmount StartCoroutine(FadeRoutine(tilemap, fadeTime, tilemap.color.a, transparencyAmount)); } } } } private void OnTriggerExit2D(Collider2D other) { if (other.gameObject.GetComponent()) // Check if the colliding object is a PlayerController { if (spriteRenderer) { if (gameObject.activeInHierarchy) { // Start fading the SpriteRenderer back to fully opaque StartCoroutine(FadeRoutine(spriteRenderer, fadeTime, spriteRenderer.color.a, 1f)); } } else if (tilemap) { if (gameObject.activeInHierarchy) { // Start fading the Tilemap back to fully opaque StartCoroutine(FadeRoutine(tilemap, fadeTime, tilemap.color.a, 1f)); } } } } private IEnumerator FadeRoutine(SpriteRenderer spriteRenderer, float fadeTime, float startValue, float targetTransparency) { float elapsedTime = 0; while (elapsedTime < fadeTime) { elapsedTime += Time.deltaTime; float newAlpha = Mathf.Lerp(startValue, targetTransparency, elapsedTime / fadeTime); // Calculate the new alpha value spriteRenderer.color = new Color(spriteRenderer.color.r, spriteRenderer.color.g, spriteRenderer.color.b, newAlpha); yield return null; } } private IEnumerator FadeRoutine(Tilemap tilemap, float fadeTime, float startValue, float targetTransparency) { float elapsedTime = 0; while (elapsedTime < fadeTime) { elapsedTime += Time.deltaTime; float newAlpha = Mathf.Lerp(startValue, targetTransparency, elapsedTime / fadeTime); // Calculate the new alpha value tilemap.color = new Color(tilemap.color.r, tilemap.color.g, tilemap.color.b, newAlpha); yield return null; } } }