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.
Checking the stable version of the documentation...
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.
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:
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()
using Godot;
public partial class Coin : Area2D
{
private void OnCoinBodyEntered(PhysicsBody2D body)
{
QueueFree();
}
}
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.
Você pode baixar este projeto aqui: area_2d_starter.zip