RayCast2D
Наследует: Node2D < CanvasItem < Node < Object
Луч в 2D пространстве, используемый для нахождения первого объекта столкновения, который он пересекает.
Описание
Рейкаст представляет собой луч от начала до target_position, который находит ближайший объект на своём пути, если пересекает какой-либо объект.
RayCast2D может игнорировать некоторые объекты, добавляя их в список исключений, заставляя отчёты об обнаружении игнорировать Area2D (collide_with_areas) или PhysicsBody2D (collide_with_bodies), или настраивая физические слои.
RayCast2D вычисляет пересечение в каждом физическом кадре и сохраняет результат до следующего физического кадра. Для немедленного рейкаста или если вы хотите настроить RayCast2D несколько раз в одном физическом кадре, используйте force_raycast_update().
Чтобы охватить область двумерного пространства, можно аппроксимировать её несколькими RayCast2D или использовать ShapeCast2D.
Обучающие материалы
Свойства
|
||
|
||
|
||
|
||
|
||
|
||
|
Методы
void |
add_exception(node: CollisionObject2D) |
void |
add_exception_rid(rid: RID) |
void |
|
void |
|
get_collider() const |
|
get_collider_rid() const |
|
get_collider_shape() const |
|
get_collision_mask_value(layer_number: int) const |
|
get_collision_normal() const |
|
get_collision_point() 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.
Маска столкновений луча. Будут обнаружены только объекты, находящиеся хотя бы в одном слое столкновений, включенном в маске. Для получения дополнительной информации см. Слои и маски столкновений в документации.
Если true, будут сообщаться столкновения.
Если true, этот луч не будет сообщать о столкновениях с родительским узлом. Это свойство действует только в том случае, если родительский узел — CollisionObject2D. См. также Node.get_parent() и add_exception().
bool hit_from_inside = false 🔗
Если true, луч обнаружит попадание при запуске внутри фигур. В этом случае нормаль столкновения будет Vector2(0, 0). Не влияет на вогнутые полигоны фигуры.
Vector2 target_position = Vector2(0, 50) 🔗
Точка назначения луча относительно Node2D.position этого луча.
Описания метода
void add_exception(node: CollisionObject2D) 🔗
Добавляет исключение столкновений, чтобы луч не сообщал о столкновениях с указанным узлом node.
void add_exception_rid(rid: RID) 🔗
Добавляет исключение столкновений, чтобы луч не сообщал о столкновениях с указанным RID.
void clear_exceptions() 🔗
Удаляет все исключения столкновений для этого луча.
void force_raycast_update() 🔗
Обновляет информацию о столкновении для луча немедленно, не дожидаясь следующего вызова _physics_process. Используйте этот метод, например, когда луч или его родительский элемент изменили состояние.
Примечание: enabled не обязательно должен быть true, чтобы это работало.
Возвращает первый объект, пересекаемый лучом, или null, если ни один объект не пересекает луч (т.е. is_colliding() возвращает false).
Примечание: Этот объект не обязательно является CollisionObject2D. Например, если луч пересекает TileMapLayer, метод вернет экземпляр TileMapLayer.
RID get_collider_rid() const 🔗
Возвращает RID первого объекта, который пересекает луч, или пустой RID, если ни один объект не пересекает луч (т. е. is_colliding() возвращает false).
int get_collider_shape() const 🔗
Возвращает идентификатор формы первого объекта, который пересекает луч, или 0, если ни один объект не пересекает луч (т. е. is_colliding() возвращает false).
Чтобы получить узел пересекаемой формы для цели CollisionObject2D, используйте:
var target = get_collider() # CollisionObject2D.
var shape_id = get_collider_shape() # Индекс формы в коллайдере.
var owner_id = target.shape_find_owner(shape_id) # Идентификатор владельца в коллайдере.
var shape = target.shape_owner_get_owner(owner_id)
var target = (CollisionObject2D)GetCollider(); // CollisionObject2D.
var shapeId = GetColliderShape(); // Индекс формы в коллайдере.
var ownerId = target.ShapeFindOwner(shapeId); // Идентификатор владельца в коллайдере.
var shape = target.ShapeOwnerGetOwner(ownerId);
bool get_collision_mask_value(layer_number: int) const 🔗
Возвращает, включен ли указанный слой collision_mask, учитывая layer_number от 1 до 32.
Vector2 get_collision_normal() const 🔗
Возвращает нормаль формы пересекающегося объекта в точке столкновения, или Vector2(0, 0), если луч начинается внутри формы и hit_from_inside равен true.
Примечание: Проверьте, что is_colliding() возвращает true перед вызовом этого метода, чтобы убедиться, что возвращаемая нормаль является допустимой и актуальной.
Vector2 get_collision_point() const 🔗
Возвращает точку столкновения, в которой луч пересекает ближайший объект в глобальной системе координат. Если hit_from_inside равен true и луч начинается внутри формы столкновения, эта функция вернет исходную точку луча.
Примечание: Проверьте, что is_colliding() возвращает true перед вызовом этого метода, чтобы убедиться, что возвращаемая точка является допустимой и актуальной.
Возвращает, пересекается ли какой-либо объект с вектором луча (с учетом длины вектора).
void remove_exception(node: CollisionObject2D) 🔗
Удаляет исключение столкновений, чтобы луч мог сообщать о столкновениях с указанным node.
void remove_exception_rid(rid: RID) 🔗
Удаляет исключение столкновений, чтобы луч мог сообщать о столкновениях с указанным RID.
void set_collision_mask_value(layer_number: int, value: bool) 🔗
На основе value включает или отключает указанный слой в collision_mask при заданном layer_number от 1 до 32.