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.