Menu
CoddyTech

OnCollisionEnter

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

Quando dois colisores começam a se tocar, Unity chama OnCollisionEnter(Collision collision) nos scripts de ambos os objetos. Ele é chamado uma vez, no passo da física em que o toque começa, e não novamente enquanto eles permanecem em contato. Para que ocorra uma colisão, pelo menos um dos dois precisa de um Rigidbody movido pela física: uma parede e um chão sem Rigidbody nunca informam nada um ao outro.

Esta caixa registra uma mensagem quando aterrissa. Ela tem um Rigidbody, então cai, e a mensagem chega no passo em que encontra o chão:

void OnCollisionEnter(Collision collision)
{
    Debug.Log("Thud!");
}

A caixa registra uma mensagem uma vez, e novamente apenas depois que sai do chão e aterrissa uma segunda vez. O chão também recebe a mensagem: um script nele ouviria a caixa aterrissar, mesmo que o chão não tenha um Rigidbody. O nome e o parâmetro precisam estar exatos. Um método chamado onCollisionEnter nunca é chamado, e nenhum erro é exibido. Um método que recebe um Collider faz Unity registrar Script error: OnCollisionEnter com This message parameter has to be of type: Collision e ignorá-lo. Enquanto os dois permanecem em contato, Unity chama OnCollisionStay a cada passo da física e, quando se separam, chama OnCollisionExit uma vez.

challenge icon

Desafio

Fácil

A placa de pressão conta o que cai sobre ela.

  1. Adicione um campo private int presses; a PressurePlate.
  2. Adicione void OnCollisionEnter(Collision collision): some 1 a presses e registre "Pressed " + presses.

Pressione “Jogar”: a caixa cai e o Console mostra Pressed 1, uma vez. Depois, “Verificar”.

Experimente você mesmo

using UnityEngine;

public class PressurePlate : MonoBehaviour
{
    // Conte cada vez que algo pousar na plataforma e registre no log: Pressed 1, Pressed 2, ...
}

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

Pratique por conta própria: Playground de Unity