ShapeCast2D
Наследует: Node2D < CanvasItem < Node < Object
Двумерная фигура, которая прочесывает область пространства для обнаружения CollisionObject2D.
Описание
Приведение формы позволяет обнаруживать объекты столкновения, перемещая его 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 🔗
Возвращает идентификатор сталкивающейся фигуры одного из нескольких столкновений в 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.
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.