Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Использование Area2D

Введение

Godot предлагает ряд объектов столкновений в 2D и 3D как для обнаружения столкновений, так и для реагирования на них. Определение, какие из них использовать в Вашем проекте, может оказаться сложным. Избежать проблем и упростить разработку можно, если понимать, как работает каждый из них и каковы его достоинства и недостатки. В этом учебном пособии мы рассмотрим узел Area2D и покажем некоторые примеры его использования.

Примечание

Этот документ предполагает, что вы знакомы с различными физическими телами Godot. Сначала прочитайте Введение в физику.

Что такое область?

Area2D определяет область в 2D пространстве. В этой области можно обнаруживать перекрытия, вхождения и выходы с другими узлами CollisionObject2D. Области также позволяют переопределять свойства локальной физики. Ниже мы рассмотрим каждую из этих функций.

Свойства области

Области имеют множество свойств, которые можно использовать для настройки их поведения.

../../_images/area2d_properties.webp

The Gravity, Linear Damp, and Angular Damp sections are used to configure the area's physics override behavior. We'll look at how to use those in the Area influence section below.

Monitoring and Monitorable are used to enable and disable the area.

The Audio Bus section allows you to override audio in the area, for example to apply an audio effect when the player moves through.

Note that Area2D extends CollisionObject2D, so it also provides properties inherited from that class. The Collision section of CollisionObject2D is where you configure the area's collision layer(s) and mask(s).

Обнаружение перекрытий

Возможно, наиболее распространенным использованием узлов Area2D является обнаружение контактов и перекрытий. Если нужно знать, что два объекта коснулись, но они не нуждаются в симуляции физического столкновения, можно использовать область для уведомления о контакте.

Например, мы делаем монету для игрока. Монета не является твердым объектом. Игрок не может стоять на ней или толкать её. Мы просто хотим, чтобы она исчезла, когда игрок прикасается к ней.

Вот настройка узла для монеты:

../../_images/area2d_coin_nodes.webp

To detect the overlap, we'll connect the appropriate signal on the Area2D. Which signal to use depends on the player's node type. If the player is another area, use area_entered. However, let's assume our player is a CharacterBody2D (and therefore a CollisionObject2D type), so we'll connect the body_entered signal.

Примечание

Если вы не знакомы с использованием сигналов, см. Использование сигналов для введения.

extends Area2D

func _on_coin_body_entered(body):
    queue_free()

Теперь наш игрок может собирать монеты!

Некоторые другие примеры использования:

  • Области отлично подходят для пуль и других снарядов, которые поражают и наносят ущерб, но не нуждаются в какой-либо другой физике, такой как отскок.

  • Используйте большую круговую область вокруг противника для задания радиуса обнаружения. Когда игрок находится за пределами области противник не может его «увидеть».

  • «Камеры безопасности» — на большом уровне с несколькими камерами прикрепите области к каждой камере и активируйте их при входе игрока.

См. Ваша первая 2D игра для примера использования Area2D в игре.

Области влияния

The second major use for area nodes is to alter physics. By default, the area won't do this, but you can enable this with the Space Override property. When areas overlap, they are processed in Priority order (higher priority areas are processed first). There are four options for override:

  • Combine — область добавляет свои значения к вычисленным на данный момент значениям.

  • Replace — область заменяет физические свойства, а области с более низким приоритетом игнорируются.

  • Combine-Replace — область добавляет свои значения силы тяжести/упругости к тем значениям, которые были рассчитаны до этого момента (в порядке приоритета), игнорируя любые области с более низким приоритетом.

  • Replace-Combine — область заменяет любую рассчитанную до этого момента гравитацию/упругость, но продолжает вычислять остальные области.

С помощью этих свойств можно создать очень сложное поведение с несколькими перекрывающимися областями.

Физические свойства, которые можно переопределить:

  • Gravity — Сила гравитации внутри области.

  • Gravity Direction - This vector does not need to be normalized.

  • Linear Damp — Как быстро объекты перестают двигаться — уменьшение линейной скорости в секунду.

  • Angular Damp — Как быстро объекты перестают вращаться — уменьшение угловой скорости в секунду.

Точечная сила тяжести

The Gravity Point property allows you to create an "attractor". Gravity in the area will be calculated towards a point, given by the Point Center property. Values are relative to the Area2D, so for example using (0, 0) will attract objects to the center of the area.

Примеры

Приведенный ниже пример проекта имеет три области, демонстрирующие переопределение физики.

../../_images/area2d_override.gif

You can download this project here: area_2d_starter.zip