RayCast3D
Сущность лучевого запроса 3D с обновляемым результатом.
RayCast3D проверяет отрезок от своей мировой позиции до преобразованного TargetPosition. TargetPosition — локальная конечная точка, не мировая координата. После IsColliding можно читать collider, точку и нормаль.
Результат обновляется в физической фазе. ForceRaycastUpdate позволяет запросить обновление сейчас, даже при Enabled = false, но не выполняет шаг всей симуляции. Настройте Mask, категории тел/зон и исключения. Попадание изнутри может иметь нулевую нормаль; проверьте её до нормализации.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
RayCast3DКонструктор
public RayCast3D();Свойства10
CollideWithAreasСвойство
public bool CollideWithAreas { get; set; }Если true, будут сообщаться о столкновениях с Area3D-ми.
CollideWithBodiesСвойство
public bool CollideWithBodies { get; set; }Если true, будут сообщаться о столкновениях с PhysicsBody3D-ми.
CollisionMaskСвойство
public uint CollisionMask { get; set; }Маска столкновений луча. Будут обнаружены только объекты, находящиеся хотя бы в одном слое столкновений, включенном в маске. Для получения дополнительной информации см. Слои и маски столкновений в документации.
DebugShapeCustomColorСвойство
public Color DebugShapeCustomColor { get; set; }Цвет, используемый для рисования формы в редакторе и в режиме работы, если Видимые области соприкосновения включён в Отладка меню. Этот цвет будет выделен во время работы, если RayCast3D С чем-то сталкивается.
В случае установки Color(0.0, 0.0, 0.0) (по умолчанию), цвет, установленный в ProjectSettings.debug/shapes/collision/shape_color используется.
DebugShapeThicknessСвойство
public int DebugShapeThickness { get; set; }Если установлено значение 1, в качестве отладочной формы используется линия. В противном случае рисуется усеченная пирамида для представления RayCast3D. Требует включения Видимые области соприкосновения в меню Debug, чтобы отладочная форма была видна во время выполнения.
EnabledСвойство
public bool Enabled { get; set; }Если true, будут сообщаться столкновения.
ExcludeParentСвойство
public bool ExcludeParent { get; set; }Если true, этот луч не будет сообщать о столкновениях с родительским узлом. Это свойство действует только в том случае, если родительский узел — CollisionObject3D. См. также Entity.GetParent и RayCast3D.AddException.
HitBackFacesСвойство
public bool HitBackFaces { get; set; }Если true, луч попадет на задние грани с вогнутыми многоугольными формами с включенной задней гранью или на формы карты высот.
HitFromInsideСвойство
public bool HitFromInside { get; set; }Если true, луч обнаружит попадание при запуске внутри фигур. В этом случае нормаль столкновения будет Vector3(0, 0, 0). Не влияет на фигуры без объема, такие как вогнутый многоугольник или карта высот.
TargetPositionСвойство
public Vector3 TargetPosition { get; set; }Локальная конечная точка отрезка относительно RayCast. Для DirectSpaceState.From/To, напротив, используются мировые координаты; преобразуйте точку через ToGlobal при сопоставлении.
Методы35
AddExceptionvoid
public void AddException(CollisionObject3D node);Добавляет исключение столкновений, чтобы луч не сообщал о столкновениях с указанным узлом node.
| Имя | Тип | По умолчанию |
|---|---|---|
node | CollisionObject3D | — |
AddExceptionRidvoid
public void AddExceptionRid(Rid rid);Добавляет исключение столкновений, чтобы луч не сообщал о столкновениях с указанным Rid.
| Имя | Тип | По умолчанию |
|---|---|---|
rid | Rid | — |
ClearExceptionsvoid
public void ClearExceptions();Удаляет все исключения столкновений для этого луча.
ForceRaycastUpdatevoid
public void ForceRaycastUpdate();Обновляет результат запроса немедленно, в том числе при Enabled = false. Не продвигает всю физику и не заменяет выбор правильного мира/фазы доступа.
GetColliderReckfellObject
public ReckfellObject GetCollider();Возвращает первый объект, который пересекает луч, или null, если ни один объект не пересекает луч (т. е. RayCast3D.IsColliding возвращает false).
Примечание: Этот объект не обязательно является CollisionObject3D. Например, если луч пересекает CsgShape3D или GridMap, метод вернет экземпляр CsgShape3D или GridMap.
ReckfellObjectGetColliderRidRid
public Rid GetColliderRid();Возвращает Rid первого объекта, который пересекает луч, или пустой Rid, если ни один объект не пересекает луч (т. е. RayCast3D.IsColliding возвращает false).
RidGetColliderShapeint
public int GetColliderShape();Возвращает идентификатор формы первого объекта, который пересекает луч, или 0, если ни один объект не пересекает луч (т. е. RayCast3D.IsColliding возвращает false).
Чтобы получить узел пересекаемой формы для цели CollisionObject3D, используйте:
var target = (CollisionObject3D)GetCollider(); // A CollisionObject3D.
var shapeId = GetColliderShape(); // The shape index in the collider.
var ownerId = target.ShapeFindOwner(shapeId); // The owner ID in the collider.
var shape = target.ShapeOwnerGetOwner(ownerId);intGetCollisionFaceIndexint
public int GetCollisionFaceIndex();Возвращает индекс грани объекта столкновения в точке столкновения или -1, если фигура, пересекающая луч, не является ConcavePolygonShape3D.
intGetCollisionMaskuint
public uint GetCollisionMask();uintGetCollisionMaskValuebool
public bool GetCollisionMaskValue(int layerNumber);Возвращает, включен ли указанный слой RayCast3D.CollisionMask, учитывая layer_number от 1 до 32.
| Имя | Тип | По умолчанию |
|---|---|---|
layerNumber | int | — |
boolGetCollisionNormalVector3
public Vector3 GetCollisionNormal();Возвращает нормаль формы пересекающегося объекта в точке столкновения или Vector3(0, 0, 0), если луч начинается внутри формы и RayCast3D.HitFromInside равен true.
Примечание: Проверьте, что RayCast3D.IsColliding возвращает true перед вызовом этого метода, чтобы убедиться, что возвращаемая нормаль является допустимой и актуальной.
Vector3GetCollisionPointVector3
public Vector3 GetCollisionPoint();Возвращает точку столкновения, в которой луч пересекает ближайший объект в глобальной системе координат. Если RayCast3D.HitFromInside равен true и луч начинается внутри формы столкновения, эта функция вернет исходную точку луча.
Примечание: Проверьте, что RayCast3D.IsColliding возвращает true перед вызовом этого метода, чтобы убедиться, что возвращаемая точка является допустимой и актуальной.
Vector3GetDebugShapeCustomColorColor
public Color GetDebugShapeCustomColor();ColorGetDebugShapeThicknessint
public int GetDebugShapeThickness();intGetExcludeParentBodybool
public bool GetExcludeParentBody();boolGetTargetPositionVector3
public Vector3 GetTargetPosition();Vector3IsCollideWithAreasEnabledbool
public bool IsCollideWithAreasEnabled();boolIsCollideWithBodiesEnabledbool
public bool IsCollideWithBodiesEnabled();boolIsCollidingbool
public bool IsColliding();Возвращает, пересекается ли какой-либо объект с вектором луча (с учетом длины вектора).
boolIsEnabledbool
public bool IsEnabled();boolIsHitBackFacesEnabledbool
public bool IsHitBackFacesEnabled();boolIsHitFromInsideEnabledbool
public bool IsHitFromInsideEnabled();boolRemoveExceptionvoid
public void RemoveException(CollisionObject3D node);Удаляет исключение столкновений, чтобы луч мог сообщать о столкновениях с указанным node.
| Имя | Тип | По умолчанию |
|---|---|---|
node | CollisionObject3D | — |
RemoveExceptionRidvoid
public void RemoveExceptionRid(Rid rid);Удаляет исключение столкновений, чтобы луч мог сообщать о столкновениях с указанным Rid.
| Имя | Тип | По умолчанию |
|---|---|---|
rid | Rid | — |
SetCollideWithAreasvoid
public void SetCollideWithAreas(bool enable);| Имя | Тип | По умолчанию |
|---|---|---|
enable | bool | — |
SetCollideWithBodiesvoid
public void SetCollideWithBodies(bool enable);| Имя | Тип | По умолчанию |
|---|---|---|
enable | bool | — |
SetCollisionMaskvoid
public void SetCollisionMask(uint mask);| Имя | Тип | По умолчанию |
|---|---|---|
mask | uint | — |
SetCollisionMaskValuevoid
public void SetCollisionMaskValue(int layerNumber, bool value);На основе value включает или отключает указанный слой в RayCast3D.CollisionMask при заданном layer_number от 1 до 32.
| Имя | Тип | По умолчанию |
|---|---|---|
layerNumber | int | — |
value | bool | — |
SetDebugShapeCustomColorvoid
public void SetDebugShapeCustomColor(Color debugShapeCustomColor);| Имя | Тип | По умолчанию |
|---|---|---|
debugShapeCustomColor | Color | — |
SetDebugShapeThicknessvoid
public void SetDebugShapeThickness(int debugShapeThickness);| Имя | Тип | По умолчанию |
|---|---|---|
debugShapeThickness | int | — |
SetEnabledvoid
public void SetEnabled(bool enabled);| Имя | Тип | По умолчанию |
|---|---|---|
enabled | bool | — |
SetExcludeParentBodyvoid
public void SetExcludeParentBody(bool mask);| Имя | Тип | По умолчанию |
|---|---|---|
mask | bool | — |
SetHitBackFacesvoid
public void SetHitBackFaces(bool enable);| Имя | Тип | По умолчанию |
|---|---|---|
enable | bool | — |
SetHitFromInsidevoid
public void SetHitFromInside(bool enable);| Имя | Тип | По умолчанию |
|---|---|---|
enable | bool | — |
SetTargetPositionvoid
public void SetTargetPosition(Vector3 localPoint);| Имя | Тип | По умолчанию |
|---|---|---|
localPoint | Vector3 | — |