RayCast2D

Наследует: Node2D < CanvasItem < Node < Object

Луч в 2D пространстве, используемый для нахождения первого объекта столкновения, который он пересекает.

Описание

Рейкаст представляет собой луч от начала до target_position, который находит ближайший объект на своём пути, если пересекает какой-либо объект.

RayCast2D может игнорировать некоторые объекты, добавляя их в список исключений, заставляя отчёты об обнаружении игнорировать Area2D (collide_with_areas) или PhysicsBody2D (collide_with_bodies), или настраивая физические слои.

RayCast2D вычисляет пересечение в каждом физическом кадре и сохраняет результат до следующего физического кадра. Для немедленного рейкаста или если вы хотите настроить RayCast2D несколько раз в одном физическом кадре, используйте force_raycast_update().

Чтобы охватить область двумерного пространства, можно аппроксимировать её несколькими RayCast2D или использовать ShapeCast2D.

Обучающие материалы

Свойства

bool

collide_with_areas

false

bool

collide_with_bodies

true

int

collision_mask

1

bool

enabled

true

bool

exclude_parent

true

bool

hit_from_inside

false

Vector2

target_position

Vector2(0, 50)

Методы

void

add_exception(node: CollisionObject2D)

void

add_exception_rid(rid: RID)

void

clear_exceptions()

void

force_raycast_update()

Object

get_collider() const

RID

get_collider_rid() const

int

get_collider_shape() const

bool

get_collision_mask_value(layer_number: int) const

Vector2

get_collision_normal() const

Vector2

get_collision_point() const

bool

is_colliding() const

void

remove_exception(node: CollisionObject2D)

void

remove_exception_rid(rid: RID)

void

set_collision_mask_value(layer_number: int, value: bool)


Описания свойств

bool collide_with_areas = false 🔗

  • void set_collide_with_areas(value: bool)

  • bool is_collide_with_areas_enabled()

Если true, будут сообщаться столкновения с Area2D.


bool collide_with_bodies = true 🔗

  • void set_collide_with_bodies(value: bool)

  • bool is_collide_with_bodies_enabled()

Если true, будут сообщаться столкновения с PhysicsBody2D.


int collision_mask = 1 🔗

  • void set_collision_mask(value: int)

  • int get_collision_mask()

Маска столкновений луча. Будут обнаружены только объекты, находящиеся хотя бы в одном слое столкновений, включенном в маске. Для получения дополнительной информации см. Слои и маски столкновений в документации.


bool enabled = true 🔗

  • void set_enabled(value: bool)

  • bool is_enabled()

Если true, будут сообщаться столкновения.


bool exclude_parent = true 🔗

  • void set_exclude_parent_body(value: bool)

  • bool get_exclude_parent_body()

Если true, этот луч не будет сообщать о столкновениях с родительским узлом. Это свойство действует только в том случае, если родительский узел — CollisionObject2D. См. также Node.get_parent() и add_exception().


bool hit_from_inside = false 🔗

  • void set_hit_from_inside(value: bool)

  • bool is_hit_from_inside_enabled()

Если true, луч обнаружит попадание при запуске внутри фигур. В этом случае нормаль столкновения будет Vector2(0, 0). Не влияет на вогнутые полигоны фигуры.


Vector2 target_position = Vector2(0, 50) 🔗

  • void set_target_position(value: Vector2)

  • Vector2 get_target_position()

Точка назначения луча относительно 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, чтобы это работало.


Object get_collider() const 🔗

Возвращает первый объект, пересекаемый лучом, или 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)

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 перед вызовом этого метода, чтобы убедиться, что возвращаемая точка является допустимой и актуальной.


bool is_colliding() const 🔗

Возвращает, пересекается ли какой-либо объект с вектором луча (с учетом длины вектора).


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.