ShapeCast3D

Успадковує: Node3D < Node < Object

A 3D форма, яка спрощує область простору для виявлення CollisionObject3Ds.

Опис

Формування фігур дозволяє виявляти об'єкти зіткнення, зміщуючи його shape вздовж напрямку формування, визначеного target_position. Це схоже на RayCast3D, але дозволяє зміщувати область простору, а не просто пряму лінію. ShapeCast3D може виявляти кілька об'єктів зіткнення. Це корисно для таких речей, як широкі лазерні промені або прив'язка простої фігури до підлоги.

Негайне перекриття зіткнень можна виконати, встановивши target_position на Vector3(0, 0, 0) та викликавши force_shapecast_update() в одному фізичному кадрі. Це допомагає подолати деякі обмеження Area3D при використанні як області миттєвого виявлення, оскільки інформація про зіткнення не є негайно доступною для нього.

Примітка: Формування фігур є більш обчислювально дорожчим, ніж променеве формування.

Властивості

bool

collide_with_areas

false

bool

collide_with_bodies

true

int

collision_mask

1

Array

collision_result

[]

Color

debug_shape_custom_color

Color(0, 0, 0, 1)

bool

enabled

true

bool

exclude_parent

true

float

margin

0.0

int

max_results

32

Shape3D

shape

Vector3

target_position

Vector3(0, -1, 0)

Методи

void

add_exception(node: CollisionObject3D)

void

add_exception_rid(rid: RID)

void

clear_exceptions()

void

force_shapecast_update()

float

get_closest_collision_safe_fraction() const

float

get_closest_collision_unsafe_fraction() const

Object

get_collider(index: int) const

RID

get_collider_rid(index: int) const

int

get_collider_shape(index: int) const

int

get_collision_count() const

bool

get_collision_mask_value(layer_number: int) const

Vector3

get_collision_normal(index: int) const

Vector3

get_collision_point(index: int) const

bool

is_colliding() const

void

remove_exception(node: CollisionObject3D)

void

remove_exception_rid(rid: RID)

void

resource_changed(resource: Resource)

void

set_collision_mask_value(layer_number: int, value: bool)


Описи властивостей

bool collide_with_areas = false 🔗

  • void set_collide_with_areas(value: bool)

  • bool is_collide_with_areas_enabled()

true, зіткнення з Area3D будуть повідомлені.


bool collide_with_bodies = true 🔗

  • void set_collide_with_bodies(value: bool)

  • bool is_collide_with_bodies_enabled()

true, зіткнення з PhysicsBody3D будуть повідомлені.


int collision_mask = 1 🔗

  • void set_collision_mask(value: int)

  • int get_collision_mask()

Зіткнення форми. Виявлено лише об’єкти, що не менше одного з шарів зіткнення. Див. Коллізійні шари та маски в документації для отримання додаткової інформації.


Array collision_result = [] 🔗

  • Array get_collision_result()

Повертає повну інформацію про зіткнення від зіткнення. Повернуто дані так само, як і в методі PhysicsDirectSpaceState2D.get_rest_info().


Color debug_shape_custom_color = Color(0, 0, 0, 1) 🔗

  • void set_debug_shape_custom_color(value: Color)

  • Color get_debug_shape_custom_color()

Спеціальний колір, який використовуватиметься для малювання фігури в редакторі та під час виконання, якщо в меню Налагодження увімкнено Видимі фігури зіткнень. Цей колір буде виділено під час виконання, якщо ShapeCast3D з чимось стикається.

Якщо встановлено значення Color(0.0, 0.0, 0.0) (за замовчуванням), використовується колір, установлений у ProjectSettings.debug/shapes/collision/shape_color.


bool enabled = true 🔗

  • void set_enabled(value: bool)

  • bool is_enabled()

Якщо true будуть повідомлені зіткнення.


bool exclude_parent = true 🔗

  • void set_exclude_parent_body(value: bool)

  • bool get_exclude_parent_body()

Якщо true, материнська вершина буде виключена з виявлення зіткнення.


float margin = 0.0 🔗

  • void set_margin(value: float)

  • float get_margin()

Зіткнення поля для форми. Більший запас допомагає виявити зіткнення більш послідовно, за вартістю точності.


int max_results = 32 🔗

  • void set_max_results(value: int)

  • int get_max_results()

Кількість перетинів може бути обмежена цим параметром, щоб зменшити час обробки.


Shape3D shape 🔗

Форма, яка буде використовуватися для запитів зіткнень.


Vector3 target_position = Vector3(0, -1, 0) 🔗

  • void set_target_position(value: Vector3)

  • Vector3 get_target_position()

Точка призначення фігури відносно Node3D.position цього вузла.


Описи методів

void add_exception(node: CollisionObject3D) 🔗

Додає виняток зіткнення, щоб фігура не повідомляла про зіткнення з указаним вузлом.


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.


Vector3 get_collision_normal(index: int) const 🔗

Повертає нормаль одного з кількох зіткнень у index об'єкта, що перетинається.


Vector3 get_collision_point(index: int) const 🔗

Повертає точку зіткнення одного з кількох зіткнень у index, де фігура перетинає об’єкт зіткнення.

Примітка: Ця точка знаходиться в глобальній системі координат.


bool is_colliding() const 🔗

Повертає будь-який об'єкт, що перетинається з вектором форми (визнання довжини вектора).


void remove_exception(node: CollisionObject3D) 🔗

Видаляє виняток зіткнення, щоб фігура повідомляла про зіткнення з указаним вузлом.


void remove_exception_rid(rid: RID) 🔗

Вилучає виключення зіткнення, щоб форма звітує зіткнення з вказаною RID.


void resource_changed(resource: Resource) 🔗

Застаріло: Use Resource.changed instead.

Цей метод нічого не робить.


void set_collision_mask_value(layer_number: int, value: bool) 🔗

На основі value, умикає чи вимикає зазначений шар в collision_mask, для layer_number між 1 і 32.