Использование Area2D
Введение
Godot предлагает ряд объектов столкновений в 2D и 3D как для обнаружения столкновений, так и для реагирования на них. Определение, какие из них использовать в Вашем проекте, может оказаться сложным. Избежать проблем и упростить разработку можно, если понимать, как работает каждый из них и каковы его достоинства и недостатки. В этом учебном пособии мы рассмотрим узел Area2D и покажем некоторые примеры его использования.
Примечание
Этот документ предполагает, что вы знакомы с различными физическими телами Godot. Сначала прочитайте Введение в физику.
Что такое область?
Area2D определяет область в 2D пространстве. В этой области можно обнаруживать перекрытия, вхождения и выходы с другими узлами CollisionObject2D. Области также позволяют переопределять свойства локальной физики. Ниже мы рассмотрим каждую из этих функций.
Свойства области
Области имеют множество свойств, которые можно использовать для настройки их поведения.
Разделы Gravity, Linear Damp, и Angular Damp используются для настройки переопределения физических свойств области. Мы рассмотрим, как их использовать, в разделе Area influence ниже.
Monitoring и Monitorable используются для включения и отключения области.
Раздел Audio Bus позволяет переопределить звук в области, например, применить звуковой эффект при перемещении игрока.
Обратите внимание, что Area2D расширяет CollisionObject2D, поэтому он также предоставляет свойства, унаследованные от этого класса. Раздел Collision объекта CollisionObject2D предназначен для настройки слоёв и масок коллизий для области.
Обнаружение перекрытий
Возможно, наиболее распространенным использованием узлов Area2D является обнаружение контактов и перекрытий. Если нужно знать, что два объекта коснулись, но они не нуждаются в симуляции физического столкновения, можно использовать область для уведомления о контакте.
Например, мы делаем монету для игрока. Монета не является твердым объектом. Игрок не может стоять на ней или толкать её. Мы просто хотим, чтобы она исчезла, когда игрок прикасается к ней.
Вот настройка узла для монеты:
Для обнаружения перекрытия мы подключим соответствующий сигнал к Area2D. Выбор сигнала зависит от типа узла игрока. Если игрок находится в другой области, используйте area_entered. Однако предположим, что наш игрок — это CharacterBody2D (и, следовательно, тип CollisionObject2D), поэтому мы подключим сигнал body_entered.
Примечание
Если вы не знакомы с использованием сигналов, см. Использование сигналов для введения.
extends Area2D
func _on_coin_body_entered(body):
queue_free()
using Godot;
public partial class Coin : Area2D
{
private void OnCoinBodyEntered(PhysicsBody2D body)
{
QueueFree();
}
}
Теперь наш игрок может собирать монеты!
Некоторые другие примеры использования:
Области отлично подходят для пуль и других снарядов, которые поражают и наносят ущерб, но не нуждаются в какой-либо другой физике, такой как отскок.
Используйте большую круговую область вокруг противника для задания радиуса обнаружения. Когда игрок находится за пределами области противник не может его «увидеть».
«Камеры безопасности» — на большом уровне с несколькими камерами прикрепите области к каждой камере и активируйте их при входе игрока.
См. Ваша первая 2D игра для примера использования Area2D в игре.
Области влияния
Второе важное применение узлов области — изменение физики. По умолчанию область не делает этого, но вы можете включить это с помощью свойства Переопределение пространства. Перекрывающиеся области обрабатываются в порядке Приоритета (области с более высоким приоритетом обрабатываются первыми). Существует четыре варианта переопределения:
Combine — область добавляет свои значения к вычисленным на данный момент значениям.
Replace — область заменяет физические свойства, а области с более низким приоритетом игнорируются.
Combine-Replace — область добавляет свои значения силы тяжести/упругости к тем значениям, которые были рассчитаны до этого момента (в порядке приоритета), игнорируя любые области с более низким приоритетом.
Replace-Combine — область заменяет любую рассчитанную до этого момента гравитацию/упругость, но продолжает вычислять остальные области.
С помощью этих свойств можно создать очень сложное поведение с несколькими перекрывающимися областями.
Физические свойства, которые можно переопределить:
Gravity — Сила гравитации внутри области.
Gravity Direction (Направление силы тяжести) - этот вектор не требует нормализации.
Linear Damp — Как быстро объекты перестают двигаться — уменьшение линейной скорости в секунду.
Angular Damp — Как быстро объекты перестают вращаться — уменьшение угловой скорости в секунду.
Точечная сила тяжести
Свойство Gravity Point позволяет создать «аттрактор». Сила гравитации в области будет рассчитана относительно точки, заданной свойством Point Center. Значения указываются относительно Area2D, например, если использовать (0, 0), объекты будут притягиваться к центру области.
Примеры
Приведенный ниже пример проекта имеет три области, демонстрирующие переопределение физики.
Вы можете загрузить этот проект здесь: area_2d_starter.zip