7. Colidindo com Objetos - TanookiVerde/WorkshopUnity GitHub Wiki
- Vamos colocar no Game Object do Dinossauro um novo componente, que será responsável por observar colisões com obstáculos.
- Crie um componente (script) novo chamado "ObstacleCollisionHandler".
- Antes de continuar com o script, temos que preparar o Game Object que será o obstáculo.
Prefabs
- A gente sabe que durante o jogo iremos criar vários obstáculos do tipo Cacto.
- A Unity permite que a gente salve um Game Object nos arquivos do jogo para ele ser facilmente criado. Esses objetos salvos nas pastas a gente chama de Prefabs.
- Para criar o Prefab do Cacto, primeiro vamos arrastar ele para uma pasta qualquer na aba
Project
. Você pode inclusive criar uma pasta para ter os seus prefabs.
- Uma coisa muito legal é que se você modificar o Prefab na pasta, os objetos daquele tipo vão mudar também.
- Selecione o prefab do Cacto e depois clique em Open Prefab (aba Inspector).
- A Unity vai abrir uma cena com apenas aquele objeto. Adicione um BoxCollider2D nele.
- No BoxCollider2D coloque para a opção
isTrigger
ser verdadeira. Explicarei depois.
- Ainda no componente, modifique o desenho do colisor para ficar pequeno.
Continuando o Script
- Vamos colocar o seguinte script nele:
public class ObstacleCollisionHandler : MonoBehaviour
{
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.CompareTag("Obstacle"))
Die();
}
private void Die()
{
//Aparecer tela de GAME OVER
}
}
- Uma das coisas inéditas neste Script é o
OnTriggerEnter2D()
, que nos lembra a mensagem OnCollisionEnter2D()
usada antes.
- O conceito é o mesmo e os dois estão falando de colisão. A diferença fica na diferença entre usar ou não um colisor no modo Trigger.
- Em resumo, o modo trigger permite que você calcule uma colisão, mas sem impedir um objeto de ficar sobre o outro.
- Digamos que se o chão estivesse no modo trigger a gente conseguiria detectar a colisão com ele, mas ele não impediria o Dinossauro de cair.
- Um objeto trigger não serve para impedir os objetos de se atravessarem.
- Usar o collider dos obstáculos como trigger faz que eles não sejam objetos atravessáveis, mas ainda assim conseguimos saber se o personagem encostou ou não neles.
- A função Die() ficará em branco por enquanto. O importante é saber que ela tem que chamar a tela de Game Over.