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

Введение

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

Примечание

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

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

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

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

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

../../_images/area2d_properties.png

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

Monitoring и Monitorable используются для включения и отключения области.

В разделе «Collision» настраиваются слои столкновений и масок области.

Раздел «Audio Bus» позволяет переопределить звук в области, например, применить звуковой эффект при прохождении через неё игрока.

Обратите внимание, что Area2D расширяет CollisionObject2D, поэтому также предоставляет свойства, унаследованные от этого класса, такие как input_pickable.

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

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

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

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

../../_images/area2d_coin_nodes.png

Чтобы обнаружить перекрытие, мы подключим соответствующий сигнал к Area2d. Используемый сигнал зависит от типа узла игрока. Если игрок является другой областью, используйте area_entered. Однако предположим, что наш игрок является KinematicBody2D (и, следовательно, типом CollisionObject2D), поэтому мы подключим сигнал body_entered.

Примечание

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

extends Area2D

func _on_Coin_body_entered(body):
    queue_free()

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

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

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

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

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

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

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

Второе основное использование узлов области состоит в изменении физики. По умолчанию область этого делать не будет, но это можно включить с помощью свойства Space Override. Если области перекрываются, они обрабатываются в порядке Priority (сначала обрабатываются области с более высоким приоритетом). Существует четыре варианта переопределения:

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

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

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

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

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

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

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

  • Gravity Vec — Направление силы тяжести. Этот вектор не нуждается в нормализации.

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

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

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

Свойство Gravity Point позволяет создать «аттрактор». Гравитация в области будет рассчитываться в направлении точки, заданной свойством Gravity Vec. Значения относятся к Area2D, поэтому, например, использование (0, 0) будет притягивать объекты в центр области.

Примеры

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

../../_images/area2d_override.gif

Вы можете скачать этот проект здесь: using_area_2d.zip