7. Colidindo com Objetos - TanookiVerde/WorkshopUnity GitHub Wiki

  1. Vamos colocar no Game Object do Dinossauro um novo componente, que será responsável por observar colisões com obstáculos.
  2. Crie um componente (script) novo chamado "ObstacleCollisionHandler".
  3. Antes de continuar com o script, temos que preparar o Game Object que será o obstáculo.

Prefabs

  1. A gente sabe que durante o jogo iremos criar vários obstáculos do tipo Cacto.
  2. 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.
  3. 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.
  4. Uma coisa muito legal é que se você modificar o Prefab na pasta, os objetos daquele tipo vão mudar também.
  5. Selecione o prefab do Cacto e depois clique em Open Prefab (aba Inspector).
  6. A Unity vai abrir uma cena com apenas aquele objeto. Adicione um BoxCollider2D nele.
  7. No BoxCollider2D coloque para a opção isTrigger ser verdadeira. Explicarei depois.
  8. Ainda no componente, modifique o desenho do colisor para ficar pequeno.

Continuando o Script

  1. 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
    }
}
  1. Uma das coisas inéditas neste Script é o OnTriggerEnter2D(), que nos lembra a mensagem OnCollisionEnter2D() usada antes.
  2. 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.
  3. 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.
  4. A função Die() ficará em branco por enquanto. O importante é saber que ela tem que chamar a tela de Game Over.