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.
Desafio
FácilA placa de pressão conta o que cai sobre ela.
- Adicione um campo
private int presses;aPressurePlate. - Adicione
void OnCollisionEnter(Collision collision): some 1 apressese 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
1Rigidbody
Gravidade e MassaEmpurrar com AddForcePular com um ImpulsoFixedUpdate para FísicaVelocidadeCorpos CinemáticosRevisão: Plataforma de Lançamento4Corrotinas
InvocarInvocar repetidamente, Cancelar invocaçãoSua primeira corrotinaLoops em corrotinasInterrompendo corrotinasRevisão: contagem regressiva10Projeto: Fuga da Arena
A ArenaCaçadores2Colisões
OnCollisionEnterO que eu acertei?Quebre no impactoNo chãoQuique e atritoFormas dos collidersRevisão: Parede destrutível5Projeto: Corrida das Moedas
A Bola RolanteMoedas para ColetarPratique por conta própria: Playground de Unity