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...
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.