ShapeCast3D
Наследует: Node3D < Node < Object
Трехмерная фигура, охватывающая область пространства для обнаружения CollisionObject3D-ов.
Описание
Приведение формы позволяет обнаруживать объекты столкновения, перемещая его shape вдоль направления приведения, определяемого target_position. Это похоже на RayCast3D, но позволяет перемещать область пространства, а не просто прямую линию. ShapeCast3D может обнаруживать несколько объектов столкновения. Это полезно для таких вещей, как широкие лазерные лучи или привязка простой формы к полу.
Немедленное перекрытие столкновений можно выполнить, установив target_position на Vector3(0, 0, 0) и вызвав force_shapecast_update() в том же физическом кадре. Это помогает преодолеть некоторые ограничения Area3D при использовании в качестве мгновенной области обнаружения, поскольку информация о столкновении не сразу доступна ему.
Примечание: Приведение формы требует больших вычислительных затрат, чем приведение лучей.
Свойства
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Методы
void |
add_exception(node: CollisionObject3D) |
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 |
resource_changed(resource: Resource) |
void |
set_collision_mask_value(layer_number: int, value: bool) |
Описания свойств
bool collide_with_areas = false 🔗
Если true, будут сообщаться о столкновениях с Area3D-ми.
bool collide_with_bodies = true 🔗
Если true, будут сообщаться о столкновениях с PhysicsBody3D-ми.
Маска столкновения формы. Будут обнаружены только те объекты, находящиеся хотя бы в одном из слое столкновения, включенном в маске. Для получения дополнительной информации см. Слои и маски столкновения в документации.
Array get_collision_result()
Возвращает полную информацию о столкновении из столкновительного развертки. Возвращаемые данные такие же, как в методе PhysicsDirectSpaceState3D.get_rest_info().
Color debug_shape_custom_color = Color(0, 0, 0, 1) 🔗
Пользовательский цвет для рисования фигуры в редакторе и во время выполнения, если Видимые формы столкновения включены в меню Отладка. Этот цвет будет выделен во время выполнения, если ShapeCast3D сталкивается с чем-то.
Если установлено значение Цвет(0.0, 0.0, 0.0) (по умолчанию), используется цвет, заданный в ProjectSettings.debug/shapes/collision/shape_color.
Если true, будут сообщаться столкновения.
Если true, родительский узел будет исключен из обнаружения столкновений.
Запас на столкновение для формы. Больший запас помогает обнаруживать столкновения более последовательно, за счет точности.
С помощью этого параметра можно ограничить количество пересечений, чтобы сократить время обработки.
Форма, которая будет использоваться для запросов на столкновение.
Vector3 target_position = Vector3(0, -1, 0) 🔗
Точка назначения фигуры относительно 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, где фигура пересекает сталкивающийся объект.
Примечание: Эта точка находится в глобальной системе координат.
Возвращает, пересекается ли какой-либо объект с вектором фигуры (с учетом длины вектора).
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.