RayCast2D

Успадковує: Node2D < CanvasItem < Node < Object

Промінь у двовимірному просторі, що використовується для знаходження першого об'єкта зіткнення, з яким він перетинається.

Опис

Променева трансляція (raycast) представляє промінь від його початку до його 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, цей raycast не повідомлятиме про зіткнення з батьківським вузлом. Ця властивість має ефект лише в тому випадку, якщо батьківський вузол є 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_layer, враховуючи 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.