ShapeCast2D
Успадковує: Node2D < CanvasItem < Node < Object
A 2D форма, яка охоплює область простору для виявлення CollisionObject2Ds.
Опис
Формування дозволяє виявляти об'єкти зіткнення шляхом їхнього зміщення shape вздовж напрямку лиття, визначеного target_position. Це схоже на RayCast2D, але дозволяє охоплювати певну область простору, а не просто пряму лінію. ShapeCast2D може виявляти кілька об'єктів зіткнення. Це корисно для таких речей, як широкі лазерні промені або прив'язка простої форми до підлоги.
Негайне перекриття зіткнень можна реалізувати, встановивши target_position на Vector2(0, 0) та викликавши force_shapecast_update() в межах однієї фізичної системи. Це допомагає подолати деякі обмеження Area2D при використанні як області миттєвого виявлення, оскільки інформація про зіткнення не є для неї одразу доступною.
Примітка: Формування фігур є більш обчислювально дорожчим, ніж променеве формування.
Властивості
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Методи
void |
add_exception(node: CollisionObject2D) |
void |
add_exception_rid(rid: RID) |
void |
|
void |
|
get_collider(index: int) const |
|
get_collider_rid(index: int) const |
|
get_collider_shape(index: int) const |
|
get_collision_count() const |
|
get_collision_mask_value(layer_number: int) const |
|
get_collision_normal(index: int) const |
|
get_collision_point(index: int) const |
|
is_colliding() const |
|
void |
|
void |
remove_exception_rid(rid: RID) |
void |
set_collision_mask_value(layer_number: int, value: bool) |
Описи властивостей
bool collide_with_areas = false 🔗
true, зіткнення з Area2D будуть повідомлені.
bool collide_with_bodies = true 🔗
true, зіткнення з PhysicsBody2D будуть повідомлені.
Зіткнення форми. Виявлено лише об’єкти, що не менше одного з шарів зіткнення. Див. Коллізійні шари та маски в документації для отримання додаткової інформації.
Array get_collision_result()
Повертає повну інформацію про зіткнення від зіткнення. Повернуто дані так само, як і в методі PhysicsDirectSpaceState2D.get_rest_info().
Якщо true будуть повідомлені зіткнення.
Якщо true, материнська вершина буде виключена з виявлення зіткнення.
Зіткнення поля для форми. Більший запас допомагає виявити зіткнення більш послідовно, за вартістю точності.
Кількість перетинів може бути обмежена цим параметром, щоб зменшити час обробки.
Форма, яка буде використовуватися для запитів зіткнень.
Vector2 target_position = Vector2(0, 50) 🔗
Точка призначення фігури відносно Node2D.position цього вузла.
Описи методів
void add_exception(node: CollisionObject2D) 🔗
Додає виняток зіткнення, щоб фігура не повідомляла про зіткнення з указаним вузлом.
void add_exception_rid(rid: RID) 🔗
Додає виключення зіткнення, тому форма не звітує зіткнення з вказаною RID.
void clear_exceptions() 🔗
Видаліть всі винятки зіткнення для цієї форми.
void force_shapecast_update() 🔗
Оновлює інформацію про зіткнення для форми негайно, не чекаючи наступного виклику _physics_process. Використовуйте цей метод, наприклад, коли форма або її батьківський елемент змінили стан.
Примітка: Для цього не потрібно встановлювати enabled на true.
float get_closest_collision_safe_fraction() const 🔗
Повертає частку від початку цього приведення до його target_position того, наскільки далеко фігура може переміститися, не викликаючи зіткнення, як значення між 0.0 і 1.0.
float get_closest_collision_unsafe_fraction() const 🔗
Повертає частку від початку цього приведення до його target_position того, наскільки далеко має переміститися форма, щоб ініціювати зіткнення, як значення між 0.0 і 1.0.
В ідеальних умовах це було б так само, як get_closest_collision_safe_fraction(), однак відливання форми обчислюється окремими кроками, тому точна точка зіткнення може бути між двома обчисленими позиціями.
Object get_collider(index: int) const 🔗
Повертає з'єднання Object одного з декількох зіткнень index, або null, якщо об'єкт не перетинає форму (тобто is_colliding() повертає false).
RID get_collider_rid(index: int) const 🔗
Повертаємо RID об'єкту, що об'єднує один з декількох зіткнень в індексі index.
int get_collider_shape(index: int) const 🔗
Повертає форму ID комірцевої форми одного з декількох зіткнень за індексом index, або 0, якщо об'єкт не перетинає форму (тобто is_colliding() повертає false).
int get_collision_count() const 🔗
Кількість виявлених зіткнень у точці удару. Використовуйте це для ітерації по кількох зіткненнях, як це передбачено методами get_collider(), get_collider_shape(), get_collision_point() та get_collision_normal().
bool get_collision_mask_value(layer_number: int) const 🔗
Повертаємо, чи не вказаний шар collision_layer, враховуючи layer_number між 1 і 32.
Vector2 get_collision_normal(index: int) const 🔗
Повертає нормаль одного з кількох зіткнень у index об'єкта, що перетинається.
Vector2 get_collision_point(index: int) const 🔗
Повертає точку зіткнення одного з кількох зіткнень у index, де фігура перетинає об’єкт зіткнення.
Примітка: Ця точка знаходиться в глобальній системі координат.
Повертає будь-який об'єкт, що перетинається з вектором форми (визнання довжини вектора).
void remove_exception(node: CollisionObject2D) 🔗
Видаляє виняток зіткнення, щоб фігура повідомляла про зіткнення з указаним вузлом.
void remove_exception_rid(rid: RID) 🔗
Вилучає виключення зіткнення, щоб форма звітує зіткнення з вказаною RID.
void set_collision_mask_value(layer_number: int, value: bool) 🔗
На основі value, умикає чи вимикає зазначений шар в collision_mask, для layer_number між 1 і 32.