Menu
CoddyTech

Entrada y salida

Parte de la sección Física y jugabilidad del Journey de Unity de Coddy. Lección 20 de 71.

Un disparador 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 la causa. 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 corresponde a un paso de física, así que OnTriggerStay es adecuado: el empuje se aplica una vez por paso mientras la pelota esté dentro y se detiene en cuanto sale. La corriente ascendente no tiene Rigidbody, así que todos los objetos que la atraviesen deben 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 equivale a la duración del paso: 0.02. Cada visita genera un OnTriggerEnter y, más tarde, un OnTriggerExit para el mismo colisionador.

challenge icon

Desafío

Fácil

Enciende la lámpara mientras haya algo en la zona de carga.

  1. Añade un campo int inBay;. En Start(), establece lamp.enabled = false;.
  2. En OnTriggerEnter, suma 1 a inBay y establece lamp.enabled = true;.
  3. En OnTriggerExit, resta 1 a inBay y apaga la lámpara solo cuando llegue a 0.

Pulsa «Jugar» y empuja las cajas hacia dentro y hacia fuera: la lámpara permanece encendida hasta que la zona esté vacía. Después, pulsa «Comprobar».

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 la zona de carga está vacía
}

Todas las lecciones de Física y jugabilidad

Practica por tu cuenta: Playground de Unity