Menu
CoddyTech

Entrada e saída

Parte da seção Física e Jogabilidade do Journey de Unity da Coddy. Lição 20 de 71.

Um gatilho envia mais duas mensagens. OnTriggerExit(Collider other) é executado uma vez, na etapa de física em que a sobreposição termina, seja qual for o motivo. OnTriggerStay(Collider other) é executado em cada etapa de física enquanto a sobreposição durar, 50 vezes por segundo por padrão, como FixedUpdate(). Os três recebem o mesmo Collider.

Essa corrente ascendente ergue tudo que flutua dentro dela e informa quando sai:

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");
}

Uma força deve ser aplicada em uma etapa de física, então OnTriggerStay é adequado: o impulso é aplicado uma vez por etapa enquanto a bola estiver dentro e para no instante em que ela sai. A corrente ascendente não tem um Rigidbody, então cada objeto que entra precisa ter um, e attachedRigidbody nunca é null aqui. Para aplicar uma quantidade por segundo dentro de OnTriggerStay, multiplique por Time.deltaTime, que durante uma etapa de física corresponde à duração da etapa: 0.02. Cada entrada gera um OnTriggerEnter e, mais tarde, um OnTriggerExit para o mesmo colisor.

challenge icon

Desafio

Fácil

Acenda a lâmpada enquanto houver qualquer coisa na área de carga.

  1. Adicione um campo int inBay;. Em Start(), defina lamp.enabled = false;.
  2. Em OnTriggerEnter, some 1 a inBay e defina lamp.enabled = true;.
  3. Em OnTriggerExit, subtraia 1 de inBay e apague a lâmpada somente quando o valor for 0.

Pressione “Jogar” e empurre as caixas para dentro e para fora: a lâmpada permanece acesa até a área ficar vazia. Depois, “Verificar”.

Experimente você mesmo

using UnityEngine;

public class LoadingBay : MonoBehaviour
{
    public Light lamp;

    // A lâmpada fica acesa enquanto houver algo na área de carga e apagada quando ela estiver vazia
}

Todas as lições de Física e Jogabilidade

Pratique por conta própria: Playground de Unity