Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Usando Area2D

Introdução

A Godot oferece uma série de objetos de colisão para proporcionar tanto a detecção de colisão quanto a resposta. Tentar decidir qual deles usar para seu projeto pode ser confuso. Você pode evitar problemas e simplificar o desenvolvimento se entender como cada um deles funciona e quais são seus prós e contras. Neste tutorial, veremos o nó Area2D e mostraremos alguns exemplos de como ele pode ser utilizado.

Nota

Este documento pressupõe que você esteja familiarizado com os vários corpos físicos do Godot. Por favor, leia Introdução à física primeiro.

O que é uma área?

Uma Area2D define uma região do espaço 2D. Neste espaço, você pode detectar a sobreposição, entrada e saída de outros nós CollisionObject2D. As áreas também permitem a sobreposição de propriedades de física locais. Exploraremos cada uma dessas funções abaixo.

Propriedades da área

As áreas possuem muitas propriedades que você pode usar para customizar seu comportamento.

../../_images/area2d_properties.webp

As seções Gravity, Linear Damp e Angular Damp são usadas para configurar o comportamento de sobreposição de física da área. Veremos como usar essas propriedades na seção Influência da área abaixo.

Monitoring e Monitorable são usados para ativar e desativar a área.

A seção Audio Bus permite que você sobreponha o áudio na área, por exemplo para aplicar um efeito de áudio quando o jogador se move através dela.

Observe que Area2D estende CollisionObject2D, então ele também fornece propriedades herdadas dessa classe. A seção Collision de CollisionObject2D é onde você configura a(s) camada(s) de colisão e a(s) máscara(s) da área.

Detecção de sobreposição

Talvez o uso mais comum de nós Area2D seja para detecção de contato e sobreposição. Quando você precisa saber que dois objetos se tocaram, mas não precisa de uma colisão física, você pode usar uma área para notificá-lo do contato.

Por exemplo, digamos que estamos fazendo uma moeda para o jogador coletar. A moeda não é um objeto sólido — o jogador não pode ficar em cima dela ou empurrá-la — nós apenas queremos que ela desapareça quando o jogador a tocar.

Aqui está a configuração de nós para a moeda:

../../_images/area2d_coin_nodes.webp

Para detectar a sobreposição, conectaremos o sinal apropriado na Area2D. Qual sinal usar depende do tipo de nó do jogador. Se o jogador for outra área, use area_entered. No entanto, vamos assumir que nosso jogador é um CharacterBody2D (e, portanto, um tipo CollisionObject2D), então conectaremos o sinal body_entered.

Nota

Se você não está familiarizado com o uso de sinais, veja Usando sinais para uma introdução.

extends Area2D

func _on_coin_body_entered(body):
    queue_free()

Agora nosso jogador pode coletar as moedas!

Alguns outros exemplos de uso:

  • Áreas são ótimas para projéteis e outras balas que atingem e causam dano, mas não precisam de nenhuma outra física, como rebote.

  • Use uma grande área circular ao redor de um inimigo para definir seu raio de "detecção". Quando o jogador está fora da área, o inimigo não pode "vê-lo".

  • "Câmeras de segurança" — Em um nível grande com múltiplas câmeras, anexe áreas a cada câmera e ative-as quando o jogador entrar.

Veja o Seu primeiro jogo 2D para um exemplo de utilização da Area2D em um jogo.

Área de influência

O segundo uso principal para nós de área é alterar a física. Por padrão, a área não fará isso, mas você pode habilitar com a propriedade Space Override. Quando as áreas se sobrepõem, elas são processadas na ordem de Priority (áreas de maior prioridade são processadas primeiro). Existem quatro opções para substituição (override):

  • Combine — A área adiciona seus valores ao que foi calculado até agora.

  • Replace — A área substitui as propriedades físicas, e as áreas de menor prioridade são ignoradas.

  • Combine-Replace — A área adiciona seus valores de gravidade/amortecimento a tudo o que foi calculado até agora (em ordem de prioridade), ignorando quaisquer áreas de menor prioridade.

  • Replace-Combine — A área substitui qualquer gravidade/amortecimento calculado até agora, mas continua calculando o restante das áreas.

Usando essas propriedades, você pode criar comportamentos muito complexos com múltiplas áreas se sobrepondo.

As propriedades físicas que podem ser sobrepostas são:

  • Gravity — A força da gravidade dentro da área.

  • Gravity Direction — Este vetor não precisa estar normalizado.

  • Linear Damp — Quão rapidamente os objetos param de se mover — velocidade linear perdida por segundo.

  • Angular Damp — Quão rapidamente os objetos param de girar — velocidade angular perdida por segundo.

Ponto de gravidade

A propriedade Gravity Point permite que você crie um "atrator". A gravidade na área será calculada em direção a um ponto, fornecido pela propriedade Point Center. Os valores são relativos à Area2D, portanto, por exemplo, usar (0, 0) atrairá objetos para o centro da área.

Exemplos

O projeto de exemplo anexado abaixo possui três áreas demonstrando a sobreposição de física.

../../_images/area2d_override.gif

Você pode baixar este projeto aqui: area_2d_starter.zip