Cursos / Jogos Digitais / Desenvolvimento com Motores de Jogos I / Aula

arrow_back Aula 04 - Detecção de colisão e o Motor de Física

Os Componentes do Motor de Física 2D

O Unity trabalha com componentes 2D distintos, os quais podemos adicionar aos nossos elementos para que estes se comportem de maneira adequada. Dizemos que um objeto se comporta de maneira adequada quando segue corretamente as leis da física, como esperado no jogo. Isso inclui acelerar e frear do modo esperado, ser afetado por colisões e responder a elas de maneira adequada, ser afetado pela gravidade e outras forças... Enfim, são diversos comportamentos a serem seguidos e o Unity, com seus componentes, permite que possamos programar para cada um deles.

O Unity trabalha com vários componentes de tipos diferentes. Devido ao tempo e à praticidade, traremos apenas o conceito principal de cada um deles e falaremos um pouco de seus funcionamentos. Os detalhes de todos os componentes, como sempre, podem ser encontrados no manual do Unity, referenciado nas leituras complementares para mais informações. Conversaremos aqui sobre os quatro tipos principais e deixaremos as suas derivações como tema de pesquisa para vocês!

Rigidbody 2D

O componente Rigidbody 2D já é um conhecido nosso! Ele foi utilizado, na aula passada, para o nosso personagem poder receber uma força, baseado no Input do usuário. Isso é apenas uma das utilidades do Rigidbody 2D. Podemos dizer, de maneira geral, que esse componente serve para adicionar um objeto, o qual antes era somente gráfico, ao motor de física. Tal componente possui diversas propriedades relacionadas a como o objeto irá interagir com esse motor.

Um ponto interessante relacionado ao funcionamento do Rigidbody 2D é que, ao adicionar esse componente em um objeto, o RidigBody assume o controle do Transform (vetores de posição, rotação e escala, que já vimos, lembra?) e passa a alterar os seus valores conforme os cálculos físicos realizados pelo motor. Isso também acontece com os colisores, vistos a seguir, que estiverem ligados ao componente - o Rigidbody 2D será capaz de movê-los e gerenciá-los de acordo com o motor de física do Unity. Embora você ainda seja capaz de alterar o Transform do objeto diretamente, é importante saber que isso afeta bastante o nosso motor de física, pois essa movimentação é inesperada dentro da simulação e pode requerer a realização de novos cálculos.

Dito isso, saiba que o Rigidbody 2D é o modo mais fácil de fazer um objeto passar a responder de maneira realista às forças físicas em geral. É através dele, principalmente, que ocorre a colisão com outros objetos (em conjunto com os colisores), pois as colisões podem resultar em forças as quais movem o objeto, e isso será mais uma das atribuições do Rigidbody 2D. Para simplificar: se você quer que um objeto se mova e obedeça a forças físicas, adicione a ele um Rigidbody 2D.

Perceba, no entanto, que colisões não são feitas pelo Rigidbody 2D e, sim, pelos colisores. A atribuição do Rigidbody 2D, nesse caso, é de gerenciar as forças resultantes das colisões detectadas e fazer o elemento que o tem reagir adequadamente, alterando seu Transform para haver uma movimentação.

A primeira propriedade de um Rigidbody 2D é o Body Type. Ela possui três valores, e a escolha de um deles afeta diretamente a interação do objeto com Colliders e a maneira com a qual o objeto se move e rotaciona. Note que isso tudo influencia diretamente no comportamento do Rigidbody 2D, e alterar algo durante a execução do jogo pode ser uma péssima ideia, devido a todos os cálculos e comportamentos a serem refeitos. Pense bem sobre o que você quer que o seu objeto faça e mantenha esse Body Type ao longo de toda a execução. As três opções são:

  • Dynamic - Esse é o tipo de Body Type mais utilizado. É um objeto feito para se mover de acordo com a simulação. Possui a maior quantidade de propriedades físicas alteráveis e é afetado por forças e colisores em geral. Isso torna esse colider o mais caro e, também, o mais suscetível a problemas, caso você altere o Transform diretamente. Evite a todos os custos fazer essa alteração manual.
  • Kinematic - Objeto que só deve se mover em situações específicas, de acordo com comandos do usuário, indicando ao Rigidbody 2D a posição/rotação do objeto, e não diretamente via Transform. Não é afetado por forças e não possui propriedades físicas de massa. Funciona como um objeto não movível em colisões (massa infinita) e não colide naturalmente.
  • Static - Objeto que não deve se mover de maneira alguma durante a simulação. Caso algum objeto entre em contato com ele, o Static funcionará como um objeto estático, com massa infinita. É capaz apenas de colidir com objetos do tipo Dynamic, já que não se move. Só possui propriedades de ativar ou desativar.

Versão 5.3 - Todos os Direitos reservados