Manuals
Manuals




This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English

Formas de colisão

Um componente de colisão pode usar várias formas primitivas ou uma única forma complexa.

Formas primitivas

As formas primitivas são box, sphere e capsule. Você adiciona uma forma primitiva clicando com o botão direito no objeto de colisão e selecionando Add Shape:

Add a primitive shape

Forma box

Uma box tem posição, rotação e dimensões (largura, altura e profundidade):

Box shape

Forma sphere

Uma sphere tem posição, rotação e diâmetro:

Sphere shape

Forma capsule

Uma capsule tem posição, rotação, diâmetro e altura:

Sphere shape

Formas capsule são suportadas apenas ao usar física 3D (configurada na seção Physics do arquivo game.project).

Formas complexas

Uma forma complexa pode ser criada a partir de um componente tilemap ou de uma forma de casco convexo.

Forma de colisão de tilemap

O Defold inclui um recurso que permite gerar facilmente formas de física para o tile source usado por um tile map. O manual de Tilesource explica como adicionar grupos de colisão a um tile source e atribuir tiles a grupos de colisão (exemplo).

Para adicionar colisão a um tile map:

  1. Adicione o tilemap a um objeto de jogo clicando com o botão direito no objeto de jogo e selecionando Add Component File. Selecione o arquivo de tile map.
  2. Adicione um componente de objeto de colisão ao objeto de jogo clicando com o botão direito no objeto de jogo e selecionando Add Component ▸ Collision Object.
  3. Em vez de adicionar formas ao componente, defina a propriedade Collision Shape para o arquivo tilemap.
  4. Configure as Properties do componente de objeto de colisão normalmente.

Tilesource collision

Observe que a propriedade Group não é usada aqui, pois os grupos de colisão são definidos no tile source do tile map.

Forma de casco convexo

O Defold inclui um recurso que permite criar uma forma de casco convexo a partir de três ou mais pontos.

  1. Crie um arquivo de forma de casco convexo (extensão de arquivo .convexshape) usando um editor externo.
  2. Edite o arquivo manualmente usando um editor de texto ou ferramenta externa (veja abaixo)
  3. Em vez de adicionar formas ao componente de objeto de colisão, defina a propriedade Collision Shape para o arquivo de convex shape.

Formato do arquivo

O formato de arquivo de casco convexo usa o mesmo formato de dados de todos os outros arquivos Defold, ou seja, o formato de texto protobuf. Uma forma de casco convexo define os pontos do casco. Em física 2D, os pontos devem ser fornecidos em sentido anti-horário. Uma nuvem abstrata de pontos é usada no modo de física 3D. Exemplo 2D:

shape_type: TYPE_HULL
data: 200.000
data: 100.000
data: 0.0
data: 400.000
data: 100.000
data: 0.0
data: 400.000
data: 300.000
data: 0.0
data: 200.000
data: 300.000
data: 0.0

O exemplo acima define os quatro cantos de um retângulo:

 200x300   400x300
    4---------3
    |         |
    |         |
    |         |
    |         |
    1---------2
 200x100   400x100

Ferramentas externas

Há várias ferramentas externas diferentes que podem ser usadas para criar formas de colisão:

Escalando formas de colisão

O objeto de colisão e suas formas herdam a escala do objeto de jogo. Para desabilitar esse comportamento, desmarque a caixa de seleção Allow Dynamic Transforms na seção Physics de game.project. Observe que apenas escala uniforme é suportada e que o menor valor de escala será usado se a escala não for uniforme.

Redimensionando formas de colisão

As formas de um objeto de colisão podem ser redimensionadas em tempo de execução usando physics.set_shape(). Exemplo:

-- define dados da forma capsule
local capsule_data = {
  type = physics.SHAPE_TYPE_CAPSULE,
  diameter = 10,
  height = 20,
}
physics.set_shape("#collisionobject", "my_capsule_shape", capsule_data)

-- define dados da forma sphere
local sphere_data = {
  type = physics.SHAPE_TYPE_SPHERE,
  diameter = 10,
}
physics.set_shape("#collisionobject", "my_sphere_shape", sphere_data)

-- define dados da forma box
local box_data = {
  type = physics.SHAPE_TYPE_BOX,
  dimensions = vmath.vector3(10, 10, 5),
}
physics.set_shape("#collisionobject", "my_box_shape", box_data)

Uma forma do tipo correto com o id especificado já deve existir no objeto de colisão.

Rotacionando formas de colisão

Rotacionando formas de colisão em física 3D

Formas de colisão em física 3D podem ser rotacionadas ao redor de todos os eixos.

Rotacionando formas de colisão em física 2D

Formas de colisão em física 2D só podem ser rotacionadas ao redor do eixo z. Rotação ao redor do eixo x ou y produzirá resultados incorretos e deve ser evitada, mesmo ao rotacionar 180 graus para essencialmente inverter a forma ao longo do eixo x ou y. Para inverter uma forma de física, é recomendado usar physics.set_hflip(url, flip) e physics.set_vflip(url, flip).

Depuração

Você pode habilitar a depuração de Física para ver as formas de colisão em tempo de execução.