RayCast2D
Сущность лучевого запроса 2D с обновляемым результатом.
RayCast2D проверяет отрезок от своей мировой позиции до преобразованного TargetPosition. TargetPosition — локальная конечная точка, не мировая координата. После IsColliding можно читать collider, точку и нормаль.
Результат обновляется в физической фазе. ForceRaycastUpdate позволяет запросить обновление сейчас, даже при Enabled = false, но не выполняет шаг всей симуляции. Настройте Mask, категории тел/зон и исключения. Попадание изнутри может иметь нулевую нормаль; проверьте её до нормализации.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
RayCast2DКонструктор
public RayCast2D();Свойства7
CollideWithAreasСвойство
public bool CollideWithAreas { get; set; }Если true, будут сообщаться столкновения с Area2D.
CollideWithBodiesСвойство
public bool CollideWithBodies { get; set; }Если true, будут сообщаться столкновения с PhysicsBody2D.
CollisionMaskСвойство
public uint CollisionMask { get; set; }Маска столкновений луча. Будут обнаружены только объекты, находящиеся хотя бы в одном слое столкновений, включенном в маске. Для получения дополнительной информации см. Слои и маски столкновений в документации.
EnabledСвойство
public bool Enabled { get; set; }Если true, будут сообщаться столкновения.
ExcludeParentСвойство
public bool ExcludeParent { get; set; }Если true, этот луч не будет сообщать о столкновениях с родительским узлом. Это свойство действует только в том случае, если родительский узел — CollisionObject2D. См. также Entity.GetParent и RayCast2D.AddException.
HitFromInsideСвойство
public bool HitFromInside { get; set; }Если true, луч обнаружит попадание при запуске внутри фигур. В этом случае нормаль столкновения будет Vector2(0, 0). Не влияет на вогнутые полигоны фигуры.
TargetPositionСвойство
public Vector2 TargetPosition { get; set; }Локальная конечная точка отрезка относительно RayCast. Для DirectSpaceState.From/To, напротив, используются мировые координаты; преобразуйте точку через ToGlobal при сопоставлении.
Методы28
AddExceptionvoid
public void AddException(CollisionObject2D node);Добавляет исключение столкновений, чтобы луч не сообщал о столкновениях с указанным узлом node.
| Имя | Тип | По умолчанию |
|---|---|---|
node | CollisionObject2D | — |
AddExceptionRidvoid
public void AddExceptionRid(Rid rid);Добавляет исключение столкновений, чтобы луч не сообщал о столкновениях с указанным Rid.
| Имя | Тип | По умолчанию |
|---|---|---|
rid | Rid | — |
ClearExceptionsvoid
public void ClearExceptions();Удаляет все исключения столкновений для этого луча.
ForceRaycastUpdatevoid
public void ForceRaycastUpdate();Обновляет результат запроса немедленно, в том числе при Enabled = false. Не продвигает всю физику и не заменяет выбор правильного мира/фазы доступа.
GetColliderReckfellObject
public ReckfellObject GetCollider();Возвращает первый объект, пересекаемый лучом, или null, если ни один объект не пересекает луч (т.е. RayCast2D.IsColliding возвращает false).
Примечание: Этот объект не обязательно является CollisionObject2D. Например, если луч пересекает TileMapLayer, метод вернет экземпляр TileMapLayer.
ReckfellObjectGetColliderRidRid
public Rid GetColliderRid();Возвращает Rid первого объекта, который пересекает луч, или пустой Rid, если ни один объект не пересекает луч (т. е. RayCast2D.IsColliding возвращает false).
RidGetColliderShapeint
public int GetColliderShape();Возвращает идентификатор формы первого объекта, который пересекает луч, или 0, если ни один объект не пересекает луч (т. е. RayCast2D.IsColliding возвращает false).
Чтобы получить узел пересекаемой формы для цели CollisionObject2D, используйте:
var target = (CollisionObject2D)GetCollider(); // A CollisionObject2D.
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);intGetCollisionMaskuint
public uint GetCollisionMask();uintGetCollisionMaskValuebool
public bool GetCollisionMaskValue(int layerNumber);Возвращает, включен ли указанный слой RayCast2D.CollisionMask, учитывая layer_number от 1 до 32.
| Имя | Тип | По умолчанию |
|---|---|---|
layerNumber | int | — |
boolGetCollisionNormalVector2
public Vector2 GetCollisionNormal();Возвращает нормаль формы пересекающегося объекта в точке столкновения, или Vector2(0, 0), если луч начинается внутри формы и RayCast2D.HitFromInside равен true.
Примечание: Проверьте, что RayCast2D.IsColliding возвращает true перед вызовом этого метода, чтобы убедиться, что возвращаемая нормаль является допустимой и актуальной.
Vector2GetCollisionPointVector2
public Vector2 GetCollisionPoint();Возвращает точку столкновения, в которой луч пересекает ближайший объект в глобальной системе координат. Если RayCast2D.HitFromInside равен true и луч начинается внутри формы столкновения, эта функция вернет исходную точку луча.
Примечание: Проверьте, что RayCast2D.IsColliding возвращает true перед вызовом этого метода, чтобы убедиться, что возвращаемая точка является допустимой и актуальной.
Vector2GetExcludeParentBodybool
public bool GetExcludeParentBody();boolGetTargetPositionVector2
public Vector2 GetTargetPosition();Vector2IsCollideWithAreasEnabledbool
public bool IsCollideWithAreasEnabled();boolIsCollideWithBodiesEnabledbool
public bool IsCollideWithBodiesEnabled();boolIsCollidingbool
public bool IsColliding();Возвращает, пересекается ли какой-либо объект с вектором луча (с учетом длины вектора).
boolIsEnabledbool
public bool IsEnabled();boolIsHitFromInsideEnabledbool
public bool IsHitFromInsideEnabled();boolRemoveExceptionvoid
public void RemoveException(CollisionObject2D node);Удаляет исключение столкновений, чтобы луч мог сообщать о столкновениях с указанным node.
| Имя | Тип | По умолчанию |
|---|---|---|
node | CollisionObject2D | — |
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 включает или отключает указанный слой в RayCast2D.CollisionMask при заданном layer_number от 1 до 32.
| Имя | Тип | По умолчанию |
|---|---|---|
layerNumber | int | — |
value | bool | — |
SetEnabledvoid
public void SetEnabled(bool enabled);| Имя | Тип | По умолчанию |
|---|---|---|
enabled | bool | — |
SetExcludeParentBodyvoid
public void SetExcludeParentBody(bool mask);| Имя | Тип | По умолчанию |
|---|---|---|
mask | bool | — |
SetHitFromInsidevoid
public void SetHitFromInside(bool enable);| Имя | Тип | По умолчанию |
|---|---|---|
enable | bool | — |
SetTargetPositionvoid
public void SetTargetPosition(Vector2 localPoint);| Имя | Тип | По умолчанию |
|---|---|---|
localPoint | Vector2 | — |