WorldBoundaryShape2D
Бесконечная линия и твёрдая полуплоскость с нормалью наружу.
WorldBoundaryShape2D задаёт бесконечную границу, а не конечную платформу. Normal направлена из твёрдой полуплоскости в свободную; начальное значение (0,-1). Distance изначально 0. При единичной Normal линия удовлетворяет Normal.Dot(point)=Distance, твёрдая сторона — Normal.Dot(point)<Distance.
В 2D ось +Y направлена вниз. Поэтому Normal=(0,-1), Distance=0 задаёт землю на y=0 с твёрдой областью снизу. Для земли на y=5 нужно Distance=-5. Проверенный помощник создаёт такую локальную границу, отбрасывая нечисловое или бесконечное y. Вызывающий код владеет ресурсом:
using System;
using Reckfell;
public static class BoundaryFactory2D
{
// Local horizontal boundary at y; solid half-space is below it (+Y).
// The caller owns the resource. This does not create a physics body.
public static WorldBoundaryShape2D Ground(float y)
{
if (!float.IsFinite(y))
throw new ArgumentOutOfRangeException(nameof(y));
return new WorldBoundaryShape2D
{
Normal = Vector2.Up,
Distance = -y
};
}
}Нормаль должна быть конечной и единичной. Setter отклоняет нулевой/почти нулевой вектор, но не нормализует остальные: назначенный (0,-2) читается как (0,-2). Без единичной нормали простая интерпретация Distance как расстояния теряется. Для направления вправо Normal=(1,0), Distance=5 линия проходит по x=5, а твёрдая сторона слева.
GetRect() возвращает конечные границы диагностической линии и стрелки. Они не ограничивают физическую полуплоскость: в проверке круг с x=100000 всё ещё сталкивался с землёй далеко за пределами этого Rect2. Для ограниченной платформы используйте другую форму.
Normal/Distance и соответствующие методы обновляют одну геометрию, испуская Changed только при новом значении. Для физического мира назначьте ресурс Shape у CollisionShape2D, который является непосредственным дочерним Entity CollisionObject2D. Создание ресурса не добавляет тело.
Проверены начальные значения, сохранение ненормализованного вектора, события, обе стороны границы, знак Distance, бесконечность за отладочными границами и точный помощник. Проверки не подтверждают движение тел, односторонние платформы, произвольные трансформации или визуальное качество.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
WorldBoundaryShape2DКонструктор
public WorldBoundaryShape2D();Создаёт бесконечную границу с Normal=(0,-1), Distance=0. В локальных координатах свободная сторона сверху, твёрдая — в направлении +Y. Не создаёт физическое тело.
Свойства2
DistanceСвойство
public float Distance { get; set; }Подписанное смещение вдоль единичной Normal, изначально 0. При единичной нормали линия задаётся Normal.Dot(point)=Distance, твёрдая сторона — меньше Distance. Для Normal=(0,-1) земля на y=5 требует Distance=-5. Setter не проверяет конечность; проверяйте вход. Изменение испускает Changed; повтор значения — нет.
NormalСвойство
public Vector2 Normal { get; set; }Нормаль в локальных координатах, изначально (0,-1), направлена из твёрдой полуплоскости в свободную. Нулевой или почти нулевой вектор отклоняется. Ненулевой вектор хранится без автоматической нормализации; задавайте конечную единичную нормаль, чтобы Distance имел смысл подписанного расстояния. Изменение испускает Changed; повтор значения — нет.
Методы4
GetDistancefloat
public float GetDistance();Сохранённое подписанное смещение; интерпретируйте вместе с единичной Normal.
floatСохранённое подписанное смещение; интерпретируйте вместе с единичной Normal.
GetNormalVector2
public Vector2 GetNormal();Сохранённая локальная нормаль без автоматической нормализации.
Vector2Сохранённая локальная нормаль без автоматической нормализации.
SetDistancevoid
public void SetDistance(float distance);Подписанное смещение вдоль единичной Normal, изначально 0. При единичной нормали линия задаётся Normal.Dot(point)=Distance, твёрдая сторона — меньше Distance. Для Normal=(0,-1) земля на y=5 требует Distance=-5. Setter не проверяет конечность; проверяйте вход. Изменение испускает Changed; повтор значения — нет.
| Имя | Тип | По умолчанию |
|---|---|---|
distance | float | — |
distanceКонечное подписанное смещение вдоль единичной Normal; может быть отрицательным.
SetNormalvoid
public void SetNormal(Vector2 normal);Нормаль в локальных координатах, изначально (0,-1), направлена из твёрдой полуплоскости в свободную. Нулевой или почти нулевой вектор отклоняется. Ненулевой вектор хранится без автоматической нормализации; задавайте конечную единичную нормаль, чтобы Distance имел смысл подписанного расстояния. Изменение испускает Changed; повтор значения — нет.
| Имя | Тип | По умолчанию |
|---|---|---|
normal | Vector2 | — |
normalКонечная единичная нормаль из твёрдой стороны в свободную. Setter не нормализует вход.