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
Промінь у двовимірному просторі, що використовується для знаходження першого об'єкта зіткнення, з яким він перетинається.
Опис
Променева трансляція (raycast) представляє промінь від його початку до його 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, цей raycast не повідомлятиме про зіткнення з батьківським вузлом. Ця властивість має ефект лише в тому випадку, якщо батьківський вузол є 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); // ID власника в колайдері.
var shape = target.ShapeOwnerGetOwner(ownerId);
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 перед викликом цього методу, щоб переконатися, що повернута точка є коректною та актуальною.
Повертає будь-який об'єкт, що перетинається з вектором променя (визнання довжини вектора).
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.