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...
Використання Area2D
Вступ
Godot пропонує ряд об’єктів зіткнення, щоб забезпечити як виявлення зіткнення, так і реагування. Спроба вирішити, який з них використовувати для вашого проекту, може заплутати. Ви зможете уникнути проблем і спростити розробку, якщо зрозумієте, як кожен з них працює і в чому його плюси і мінуси. У цьому посібнику ми розглянемо вузол Area2D і покажемо кілька прикладів того, як його можна використовувати.
Примітка
Цей документ передбачає, що ви знайомі з різними фізичними тілами Godot. Спочатку прочитайте Вступ до курсу фізики.
Що таке площа?
Area2D визначає область двовимірного простору. У цьому просторі ви можете виявити інші вузли CollisionObject2D, які перекриваються, входять і виходять. Області також дозволяють перевизначати локальні фізичні властивості. Нижче ми розглянемо кожну з цих функцій.
Властивості площі
Області мають багато властивостей, за допомогою яких можна налаштувати їх поведінку.
Розділи Gravity, Linear Damp і Angular Damp використовуються для налаштування поведінки перевизначення фізики області. Нижче ми розглянемо, як їх використовувати, у розділі Вплив області.
Monitoring і Monitorable використовуються для ввімкнення та вимкнення області.
Розділ Аудіошина дозволяє перевизначати аудіо в області, наприклад, застосовувати звуковий ефект, коли гравець рухається.
Зверніть увагу, що Area2D розширює CollisionObject2D, тому він також надає властивості, успадковані від цього класу. Розділ Зіткнення 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 у грі.
Площа впливу
Друге важливе використання вузлів області - це зміна фізики. За замовчуванням область цього не робить, але ви можете ввімкнути це за допомогою властивості Space Override. Коли області накладаються, вони обробляються в порядку Пріоритету (першими обробляються області з вищим пріоритетом). Є чотири варіанти перевизначення:
Об'єднати - Площа додає свої значення до того, що було обчислено на даний момент.
Замінити – область замінює фізичні властивості, а нижчі пріоритетні області ігноруються.
Об'єднати-замінити - область додає свої значення сили тяжіння/затухання до того, що було обчислено на даний момент (у порядку пріоритету), ігноруючи будь-які нижчі пріоритетні області.
Замінити-об’єднати – Площа замінює будь-які обчислені на даний момент сили тяжіння/затухання, але продовжує обчислення решти площ.
Використовуючи ці властивості, ви можете створити дуже складну поведінку з кількома областями, що перекриваються.
Фізичні властивості, які можна змінити:
Гравітація - Сила гравітації всередині області.
Напрямок сили тяжіння – цей вектор не потребує нормалізації.
Linear Damp - як швидко об'єкти припиняють рухатися - лінійна швидкість втрачається за секунду.
Angular Damp – як швидко об’єкти припиняють обертатися – втрата кутової швидкості за секунду.
Точкове тяжіння
Властивість Gravity Point дозволяє створити "атрактор". Сила тяжіння в області обчислюватиметься до точки, заданої властивістю Центр точки. Значення є відносними до Area2D, тому, наприклад, використання (0, 0) притягне об’єкти до центру області.
Приклади
Приклад проекту, який додається нижче, містить три області, що демонструють перевизначення фізики.
Ви можете завантажити цей проект тут: area_2d_starter.zip