using UnityEngine; public class PuertaCorrediza : MonoBehaviour { [Header("Configuración de la Puerta")] public float distanciaApertura = 3.0f; // Distancia a la que se abre la puerta public float velocidadApertura = 2.0f; // Velocidad de apertura/cierre public Vector3 direccionApertura = Vector3.right; // Dirección en que se mueve la puerta public float distanciaMovimiento = 2.0f; // Cuánto se mueve la puerta al abrirse [Header("Opcionales")] public Transform sensor; // Objeto que detecta al jugador (si es null usa la posición de la puerta) public string tagObjetivo = "Player"; // Tag del objeto que activa la puerta (dejar vacío para cualquier objeto) private Vector3 posicionCerrada; private Vector3 posicionAbierta; private bool agenteCerca = false; private float porcentajeApertura = 0f; void Start() { // Configurar posiciones iniciales posicionCerrada = transform.position; posicionAbierta = posicionCerrada + (direccionApertura.normalized * distanciaMovimiento); // Si no hay sensor asignado, usar la puerta misma if (sensor == null) { sensor = transform; } } void Update() { // Detectar agentes cercanos bool detectado = false; Collider[] collidersCercanos = Physics.OverlapSphere(sensor.position, distanciaApertura); foreach (Collider col in collidersCercanos) { // Si no hay tag específico definido o si el collider tiene el tag buscado if (string.IsNullOrEmpty(tagObjetivo) || col.CompareTag(tagObjetivo)) { detectado = true; break; } } // Actualizar estado if (detectado != agenteCerca) { agenteCerca = detectado; } // Mover la puerta suavemente porcentajeApertura = Mathf.Clamp01(porcentajeApertura + (agenteCerca ? velocidadApertura : -velocidadApertura) * Time.deltaTime); transform.position = Vector3.Lerp(posicionCerrada, posicionAbierta, porcentajeApertura); } // Dibujar gizmos en el editor para visualizar el rango de detección void OnDrawGizmosSelected() { if (sensor == null) return; Gizmos.color = Color.yellow; Gizmos.DrawWireSphere(sensor.position, distanciaApertura); if (Application.isPlaying) { Gizmos.color = Color.green; Gizmos.DrawLine(posicionCerrada, posicionAbierta); Gizmos.DrawSphere(posicionAbierta, 0.1f); } else { Gizmos.color = Color.blue; Vector3 posAbiertaPreview = transform.position + (direccionApertura.normalized * distanciaMovimiento); Gizmos.DrawLine(transform.position, posAbiertaPreview); Gizmos.DrawSphere(posAbiertaPreview, 0.1f); } } }