Colisores de gatilho
Parte da seção Física e jogabilidade do Journey de Unity da Coddy. Lição 15 de 63.
Um colisor com Is Trigger marcado deixa de ser sólido: os corpos rígidos atravessam-no, e o Unity informa a sobreposição, em vez disso, chamando OnTriggerEnter nos scripts de ambos os objetos. Linhas de chegada, itens coletáveis e zonas de perigo são gatilhos. No código, a caixa é a propriedade isTrigger do colisor.
A zona de alarme deste cofre transforma o colisor em um gatilho quando o jogo começa, o que equivale a marcar a caixa, e soa o alarme quando um guarda entra:
void Start()
{
GetComponent<Collider>().isTrigger = true;
}
void OnTriggerEnter(Collider other)
{
Debug.Log("Alarm!");
}Os gatilhos seguem a mesma regra das colisões: o Unity só verifica um par quando pelo menos um dos dois objetos tem um Rigidbody. Dois objetos sem um nunca detectam um ao outro, sejam gatilhos ou não. Os guardas patrulham por meio de um script, então cada guarda tem um Rigidbody cinemático (Add Component, Rigidbody, Is Kinematic marcado): a gravidade e os impactos não o afetam, e ele ainda conta como um Rigidbody. Sem os Rigidbodies dos guardas, um guarda atravessa a zona e o Console permanece vazio. Sem isTrigger, a zona é uma caixa sólida, e um corpo cinemático nunca toca um colisor que não tenha Rigidbody, então, novamente, nada é registrado. Basta um Rigidbody no par, em qualquer um dos objetos. A próxima lição aborda other, o colisor que entrou.
Desafio
FácilO Drone deve voar por uma rota que passa por três anéis, e cada Ring deve registrar seu nome e passed à medida que o drone passa por ele, por exemplo Ring1 passed. Nada funciona ainda: o script do drone o faz voar usando MovePosition, mas nada na cena tem um Rigidbody, e os anéis são sólidos.
- Em
Drone.cs, dê um Rigidbody ao drone quando o jogo começar e mantenha-o embody. O drone deve voar nivelado ao longo da rota. Um Rigidbody no drone cobre os três anéis. - Em
Ring.cs, configure o collider de cada anel como um trigger quando o jogo começar.
Pressione Jogar e observe o Console; em seguida, pressione Verificar.
Experimente você mesmo
using UnityEngine;
public class Ring : MonoBehaviour
{
void Start()
{
// Transforme o collider deste anel em um trigger
}
void OnTriggerEnter(Collider other)
{
Debug.Log(name + " passed");
}
}
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
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çamento2Colisõ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 Coletar