Mesh Collider

O Mesh Collider, diferente dos colisores primitivos (Box Collider, Sphere Collider e Capsule Collider), é um colisor especial que não tem um formato geométrico definido, ou seja, ele utiliza um modelo 3D previamente criado como base para o seu formato.

O Mesh Collider é muito útil quando você precisa criar um colisor mais complexo, o qual tenha sua própria geometria. Assim, as interações físicas com o objeto ao qual ele está adicionado serão muito mais realistas, entretanto isso terá um alto custo de performance se o modelo 3D utilizado para o colisor tiver muitas faces e vértices. Use colisores primitivos sempre que possível.

Para adicionar um Mesh Collider, selecione um objeto (a Caneca, por exemplo) e clique no botão Add Componente, logo em seguida, escolhendo a opção Physics -> Mesh Collider. Isso fará com que um componente Mesh Collider apareça no Inspector do objeto. Veja a Figura 14.

Mesh Collider no inspector do objeto (Caneca).

As propriedades do Mesh Collider são:

  • Convex: se marcado, esse colisor interage com outros colisores que tenham Rigidbody (explicaremos melhor adiante).
    • Inflate Mesh: se marcado, faz o Unity “inflar” o colisor gerado, de modo que ele fique um pouco maior.
      • Skin Width: define quanto maior o colisor marcado com Inflate Mesh será. O valor padrão de 0.01 é normalmente o suficiente.
    • Is Trigger: assim como nos outros Colliders, se habilitado, o colisor é utilizado para “eventos de gatilho”.
  • Material: o Physics Material que será utilizado.
  • Mesh: refere-se ao modelo 3D que o Mesh Collider utilizará como referência para sua geometria. Por padrão, ele utiliza o mesmo modelo 3D do objeto ao qual ele está adicionado, entretanto você pode escolher outro modelo 3D (normalmente um modelo mais simplificado).

Logo depois de adicionar um Mesh Collider, pode ser que você não veja nenhum contorno verde no objeto representando sua geometria. Para isso, você precisa marcar a opção “Convex” e, em seguida, “Inflate Mesh” (normalmente opcional).

A opção Convex é muito importante, pois cria um colisor baseado no Mesh escolhido (por padrão, o do próprio objeto) e limitado a 255 faces. Isso faz com que, mesmo sendo um colisor de geometria personalizada, o Unity não tenha tanto trabalho calculando sua colisão com outros Colliders. Se essa opção não estiver marcada, o Mesh Collider não entrará em colisão com outros Mesh Colliders, portanto é importante marcá-la.

Marque as opções Convex e Inflate Mesh, conforme o exemplo da Figura 15.

Mesh Collider com os atributos Convex e Inflate marcados.

Como já falado, o atributo Mesh já vem com o Mesh do próprio modelo selecionado (no caso da nossa Caneca, esse Mesh tem o nome de Cylinder01). Quando marcamos as opções Convex e Inflate Mesh (esta talvez não seja necessária), um colisor de geometria aproximado ao do escolhido no atributo Mesh será criado e você poderá visualizá-lo no Scene View, como mostra a Figura 16.

Mesh Collider na caneca com as opções Convex e Inflate marcadas.

Repare que esse procedimento não gera um colisor perfeito, e sim uma aproximação. Na verdade, quando você marca a opção Convex, o Unity apresenta uma mensagem de erro, por meio da qual diz que o Mesh escolhido tem muitas regiões suavizadas e pede para você escolher um Mesh mais simples ou marcar a opção Inflate. O ideal é que o modelador 3D criador do modelo faça duas versões deste, uma para sua exibição e outra para seu Mesh Collider, sendo essa última com o limite máximo de 255 faces. Entretanto, o Unity faz um trabalho normalmente razoável criando esse colisor para você com a opção Inflate.

Versão 5.3 - Todos os Direitos reservados