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
Луч в 3D пространстве, используемый для нахождения первого объекта столкновения, который он пересекает.
Описание
Raycast представляет собой луч от его начала до target_position, который находит ближайший объект на своем пути, если он пересекает какой-либо.
RayCast3D может игнорировать некоторые объекты, добавляя их в список исключений, заставляя свой отчет об обнаружении игнорировать Area3D (collide_with_areas) или PhysicsBody3D (collide_with_bodies), или настраивая физические слои.
RayCast3D вычисляет пересечение в каждом физическом кадре и сохраняет результат до следующего физического кадра. Для немедленного raycast или если вы хотите настроить RayCast3D несколько раз в одном физическом кадре, используйте force_raycast_update().
Чтобы охватить область трехмерного пространства, вы можете аппроксимировать область несколькими 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) 🔗
Пользовательский цвет, используемый для рисования фигуры в редакторе и во время выполнения, если Видимые формы столкновения включены в меню Отладка. Этот цвет будет выделен во время выполнения, если RayCast3D сталкивается с чем-то.
Если установлено значение Цвет(0.0, 0.0, 0.0) (по умолчанию), используется цвет, заданный в ProjectSettings.debug/shapes/collision/shape_color.
int debug_shape_thickness = 2 🔗
Если установлено значение 1, в качестве отладочной формы используется линия. В противном случае рисуется усеченная пирамида для представления RayCast3D. Требует включения Visible Collision Shapes в меню Debug, чтобы отладочная форма была видна во время выполнения.
Если true, будут сообщаться столкновения.
Если true, этот луч не будет сообщать о столкновениях с родительским узлом. Это свойство действует только в том случае, если родительский узел — 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() # A 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(); // A CollisionObject3D.
var shapeId = GetColliderShape(); // Индекс формы в коллайдере.
var ownerId = target.ShapeFindOwner(shapeId); // Идентификатор владельца в коллайдере.
var shape = target.ShapeOwnerGetOwner(ownerId);
int get_collision_face_index() const 🔗
Возвращает индекс грани объекта столкновения в точке столкновения или -1, если фигура, пересекающая луч, не является ConcavePolygonShape3D.
bool get_collision_mask_value(layer_number: int) const 🔗
Возвращает, включен ли указанный слой collision_mask, учитывая 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.