ShapeCast3D

Наследует: Node3D < Node < Object

Трехмерная фигура, охватывающая область пространства для обнаружения CollisionObject3D-ов.

Описание

Приведение формы позволяет обнаруживать объекты столкновения, перемещая его 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()

Возвращает полную информацию о столкновении из столкновительного развертки. Возвращаемые данные такие же, как в методе PhysicsDirectSpaceState3D.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 сталкивается с чем-то.

Если установлено значение Цвет(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 🔗

Возвращает идентификатор сталкивающейся фигуры одного из нескольких столкновений в 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_mask, учитывая 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.