Entrada y salida
Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 19 de 63.
Un activador envía dos mensajes más. OnTriggerExit(Collider other) se ejecuta una vez, en el paso de física en el que termina la superposición, sea cual sea el motivo. OnTriggerStay(Collider other) se ejecuta en cada paso de física mientras dura la superposición, 50 veces por segundo de forma predeterminada, como FixedUpdate(). Los tres reciben el mismo Collider.
Esta corriente ascendente levanta todo lo que flota en su interior e informa cuando sale:
public float lift = 15f;
void OnTriggerStay(Collider other)
{
other.attachedRigidbody.AddForce(Vector3.up * lift);
}
void OnTriggerExit(Collider other)
{
Debug.Log(other.name + " left the updraft");
}Una fuerza debe aplicarse en un paso de física, así que OnTriggerStay es adecuado: el impulso se aplica una vez por paso mientras la pelota esté dentro y se detiene en el momento en que sale. La corriente ascendente no tiene Rigidbody, así que cada objeto que la atraviese debe tener uno, y attachedRigidbody nunca es null en este caso. Para aplicar una cantidad por segundo dentro de OnTriggerStay, multiplica por Time.deltaTime, que durante un paso de física es la duración del paso: 0.02. Cada visita genera un OnTriggerEnter y, más tarde, un OnTriggerExit para el mismo colisionador.
Desafío
FácilLa Bahía amarilla pintada en el suelo del almacén es un disparador, y lamp es la luz de advertencia del poste que hay junto a ella. Escribe LoadingBay para que la lámpara indique si hay algo en la bahía:
- Cuando empieza el juego, la bahía está vacía, así que la lámpara está apagada (
lamp.enabled = false). - Mientras haya al menos un objeto en la bahía, la lámpara está encendida.
- Cuando se vaya el último objeto, la lámpara vuelve a apagarse.
Dos cajas y el jugador pueden estar en la bahía a la vez, así que que uno se vaya no significa que la bahía esté vacía. Pulsa Play y empuja las cajas hacia dentro y hacia fuera con las flechas; después, pulsa Check.
Pruébalo tú mismo
using UnityEngine;
public class LoadingBay : MonoBehaviour
{
public Light lamp;
// La lámpara está encendida mientras haya algo en la zona de carga y apagada cuando esté vacía
}
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Física y jugabilidad
1Cuerpo rígido
Gravedad y masaEmpujar con AddForceSaltar con un impulsoFixedUpdate para físicaVelocidadCuerpos cinemáticosRepaso: plataforma de lanzamiento2Colisiones
OnCollisionEnter¿Qué golpeé?Romper al impactarDe pie sobre el sueloRebote y fricciónFormas de los collidersRepaso: muro destructible5Proyecto: Carrera de monedas
La bola rodanteMonedas para recoger