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...
RayCast3D
Успадковує: Node3D < Node < Object
Промінь у тривимірному просторі, що використовується для знаходження першого об'єкта зіткнення, з яким він перетинається.
Опис
Raycast представляє промінь від його початку до його target_position, який знаходить найближчий об’єкт на своєму шляху, якщо він перетинає будь-який.
RayCast3D може ігнорувати деякі об’єкти, додаючи їх до списку винятків, ігноруючи звіти про виявлення Area3D (collide_with_areas) або PhysicsBody3D (collide_with_bodies), або налаштовуючи фізичні шари.
RayCast3D обчислює перетин кожного фізичного кадру та зберігає результат до наступного фізичного кадру. Для негайного raycast або якщо ви хочете налаштувати RayCast3D кілька разів у межах одного фізичного кадру, використовуйте force_raycast_update().
Щоб охопити область 3D-простору, ви можете наблизити область за допомогою кількох RayCast3D або використати ShapeCast3D.
Посібники
Властивості
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Методи
void |
add_exception(node: CollisionObject3D) |
void |
add_exception_rid(rid: RID) |
void |
|
void |
|
get_collider() const |
|
get_collider_rid() const |
|
get_collider_shape() const |
|
get_collision_face_index() 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, зіткнення з Area3D будуть повідомлені.
bool collide_with_bodies = true 🔗
true, зіткнення з PhysicsBody3D будуть повідомлені.
Маска зіткнення променів. Виявлено лише об’єкти, що не менше одного з шарів зіткнення. Див. Коллізійні шари та маски в документації для отримання додаткової інформації.
Color debug_shape_custom_color = Color(0, 0, 0, 1) 🔗
У меню Debug ввімкнено ** користувацький колорит . Цей колір буде виділений в режимі run-time, якщо **RayCast3D є співвідношенні з чимось.
Якщо встановити на Color(0.0, 0.0, 0.0) (за замовчуванням), колір встановлюється в ProjectSettings.debug/shapes/collision/shape_color.
int debug_shape_thickness = 2 🔗
Якщо встановити до 1, то рядок використовується як форма дебюг. В іншому випадку обрізається обрізна піраміда для представлення RayCast3D. Потрібні Відомі фігури Collision, щоб бути ввімкнені в меню Debug для форми debug, щоб бути видимими на run-time.
Якщо true будуть повідомлені зіткнення.
Якщо значення true, цей raycast не повідомлятиме про зіткнення з батьківським вузлом. Ця властивість має ефект лише в тому випадку, якщо батьківський вузол є CollisionObject3D. Див. також Node.get_parent() та add_exception().
Якщо true, промінь подарує спинки обличчям з застібкою полігонних форм з заднім обличчям увімкненими або висотними формами.
bool hit_from_inside = false 🔗
Якщо true, промінь виявить удар при запуску внутрішніх форм. У цьому випадку норма зіткнення буде Vector3(0, 0, 0). Чи не впливає на форми без об'єму, як приховати полігон або карту висоти.
Vector3 target_position = Vector3(0, -1, 0) 🔗
Точка призначення променя відносно цього променевого потоку Node3D.position.
Описи методів
void add_exception(node: CollisionObject3D) 🔗
Додає виняток колізії, щоб промінь не повідомляв про колізії із зазначеним вузлом node.
void add_exception_rid(rid: RID) 🔗
Додає виключення зіткнення, тому промінь не повідомляє зіткнення з вказаною RID.
void clear_exceptions() 🔗
Видаліть всі винятки зіткнення для цього променя.
void force_raycast_update() 🔗
Оновлення інформації про зіткнення для променя відразу, не чекаючи наступного _physics_process виклику. Використовуйте цей метод, наприклад, при зміні стану променя або його батьків.
Примітка: enabled не потрібно true для цього для роботи.
Повертає перший об’єкт, який перетинає промінь, або null, якщо жоден об’єкт не перетинає промінь (тобто is_colliding() повертає false).
**Примітка: ** Цей об’єкт не гарантовано буде CollisionObject3D. Наприклад, якщо промінь перетинає CSGShape3D або GridMap, метод поверне екземпляр CSGShape3D або GridMap.
RID get_collider_rid() const 🔗
Повертає RID першого об'єкта, який перетинає промінь, або порожнє значення RID, якщо жоден об'єкт не перетинає промінь (тобто is_colliding() повертає false).
int get_collider_shape() const 🔗
Повертає ідентифікатор форми першого об’єкта, який перетинає промінь, або 0, якщо жоден об’єкт не перетинає промінь (тобто is_colliding() повертає false).
Щоб отримати пересічний вузол фігури для цілі CollisionObject3D, використовуйте:
var target = get_collider() # CollisionObject3D.
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 = (CollisionObject3D)GetCollider(); // CollisionObject3D.
var shapeId = GetColliderShape(); // Індекс форми в коллайдері.
var ownerId = target.ShapeFindOwner(shapeId); // ID власника в колайдері.
var shape = target.ShapeOwnerGetOwner(ownerId);
int get_collision_face_index() const 🔗
Повернення індексу зіткнення на місці зіткнення, або -1, якщо форма перетинає променя не є ConcavePolygonShape3D.
bool get_collision_mask_value(layer_number: int) const 🔗
Повертаємо, чи не вказаний шар collision_layer, враховуючи layer_number між 1 і 32.
Vector3 get_collision_normal() const 🔗
Повертає нормаль форми об'єкта, що перетинається, у точці зіткнення, або Vector3(0, 0, 0), якщо промінь починається всередині форми, а hit_from_inside має значення true.
Примітка: Переконайтеся, що is_colliding() повертає true перед викликом цього методу, щоб переконатися, що повернена нормаль є коректною та актуальною.
Vector3 get_collision_point() const 🔗
Повертає точку зіткнення, в якій промінь перетинає найближчий об'єкт у глобальній системі координат. Якщо hit_from_inside має значення true, а промінь починається всередині фігури зіткнення, ця функція поверне точку початку координат променя.
Примітка: Переконайтеся, що is_colliding() повертає true перед викликом цього методу, щоб переконатися, що повернута точка є коректною та актуальною.
Повертає будь-який об'єкт, що перетинається з вектором променя (визнання довжини вектора).
void remove_exception(node: CollisionObject3D) 🔗
Видаляє виняток зіткнення, щоб промінь міг повідомляти про зіткнення із зазначеним 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.