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.