Colliders de gatilho
Parte da seção Física e Jogabilidade do Journey de Unity da Coddy. Lição 15 de 71.
Um collider com a opção Is Trigger marcada deixa de ser sólido: os rigidbodies passam direto por ele, e o Unity informa a sobreposição em vez disso, chamando OnTriggerEnter nos scripts dos dois objetos. Linhas de chegada, itens coletáveis e zonas de perigo são triggers. No código, a caixa é a propriedade isTrigger do collider.
A zona de alarme deste cofre transforma seu collider em um trigger quando o jogo começa, o que equivale a marcar a caixa, e toca o alarme quando um guarda entra:
void Start()
{
GetComponent<Collider>().isTrigger = true;
}
void OnTriggerEnter(Collider other)
{
Debug.Log("Alarm!");
}Os triggers 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 Rigidbody nunca detectam um ao outro, sejam triggers 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 continua vazio. Sem isTrigger, a zona é uma caixa sólida, e um corpo cinemático nunca toca um collider que não tenha um Rigidbody, então, novamente, nada é registrado. Um Rigidbody no par é suficiente, em qualquer um dos objetos. A próxima aula aborda other, o collider que entrou.
Desafio
FácilFaça o drone voar pelos anéis e deixe cada anel relatá-lo.
- Em
Start()deDrone.cs, definabody = gameObject.AddComponent<Rigidbody>();ebody.isKinematic = true;para que ele voe nivelado. - Em
Start()deRing.cs, definaGetComponent<Collider>().isTrigger = true;.
Pressione “Jogar”: o drone voa pelos anéis, e o Console exibe Ring1 passed, Ring2 passed e Ring3 passed. Em seguida, clique em “Verificar”.
Experimente você mesmo
using UnityEngine;
public class Ring : MonoBehaviour
{
void Start()
{
// Faça o collider deste anel funcionar como um trigger
}
void OnTriggerEnter(Collider other)
{
Debug.Log(name + " passed");
}
}
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