Menu
CoddyTech

OnTriggerEnter

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

void OnTriggerEnter(Collider other) é executado uma vez, na etapa de física em que outro colisor começa a se sobrepor a um gatilho. other é esse colisor, então other.name, other.gameObject e other.CompareTag("Player") informam o que entrou. Unity o chama nos scripts de ambos os objetos: no gatilho, other é o visitante e, no visitante, other é o gatilho.

Esta linha de chegada reage ao jogador e a nada mais, então uma bola que rola sobre ela não registra nada:

void OnTriggerEnter(Collider other)
{
    if (other.CompareTag("Player"))
    {
        Debug.Log(other.name + " crossed the finish line");
    }
}

O parâmetro precisa ser um Collider. Escrito como void OnTriggerEnter(Collision collision), o script ainda compila, porque, para C#, é um método comum. Unity verifica o próprio parâmetro, registra um Script error: OnTriggerEnter que diz This message parameter has to be of type: Collider e nunca chama o método. Collision pertence a OnCollisionEnter, em que dois corpos sólidos se encontram em um ponto de contato. Um gatilho não tem contato para relatar, apenas o colisor, então recebe um Collider.

challenge icon

Desafio

Fácil

Corrija o método do pedágio e, em seguida, cobre o pedágio dos carros.

  1. Pressione “Jogar”: o Console mostra um erro sobre o método. Altere-o para void OnTriggerEnter(Collider other).
  2. Dentro dele, quando other.CompareTag("Car"), adicione toll a collected e registre "Toll: " + collected. O ciclista passa de graça.

Pressione “Jogar”: o Console mostra Toll: 3 e, em seguida, Toll: 6. Depois, pressione “Verificar”.

Experimente você mesmo

using UnityEngine;

public class TollGate : MonoBehaviour
{
    public int toll = 3;
    int collected;

    void OnTriggerEnter(Collision collision)
    {
        // Carros pagam o pedágio; qualquer outra coisa passa de graça
    }
}

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

Pratique por conta própria: Playground de Unity