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