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.