CapsuleShape2D
Вертикальная капсула: радиус, полная высота и прямой участок.
Капсула вытянута вдоль локальной оси Y и центрирована в начале координат. Radius задаёт радиус закруглений; ширина равна 2×Radius. Height включает оба закругления. MidHeight — только прямой участок: Height−2×Radius. По умолчанию Radius=10, Height=30, MidHeight=10. GetRect() имеет позицию (-Radius,-Height/2) и размер (2×Radius,Height).
Размеры связаны. Увеличение Radius сверх Height/2 поднимает Height до диаметра. Уменьшение Height ниже диаметра уменьшает Radius. Поэтому Radius=20, затем Height=10 даёт радиус 5 и высоту 10; обратный порядок даёт радиус 20 и высоту 40.
Если известны радиус и высота прямого участка, сначала задайте Radius, затем MidHeight. Полный проверенный помощник валидирует вход до создания native-ресурса. Вызывающий код владеет результатом:
using System;
using Reckfell;
public static class ShapeFactory2D
{
// The caller owns the resource. Width is twice the radius;
// middleHeight excludes the two rounded ends.
public static CapsuleShape2D Capsule(float radius, float middleHeight)
{
if (!float.IsFinite(radius) || radius <= 0)
throw new ArgumentOutOfRangeException(nameof(radius));
if (!float.IsFinite(middleHeight) || middleHeight < 0 ||
!float.IsFinite(middleHeight + 2 * radius))
throw new ArgumentOutOfRangeException(nameof(middleHeight));
var shape = new CapsuleShape2D();
shape.Radius = radius;
shape.MidHeight = middleHeight;
return shape;
}
}ShapeFactory2D.Capsule(8,24) создаёт ширину 16 и общую высоту 40. MidHeight=0 убирает прямой участок. MidHeight доступно в C#, хотя не показывается как обычное поле Inspector. Повтор Radius или Height не испускает Changed; повтор MidHeight испускает.
Чтобы включить форму в физический мир, назначьте её Shape у CollisionShape2D внутри CollisionObject2D. Общий ресурс остаётся общим: создавайте отдельные экземпляры для независимых размеров.
Проверены порядок setter, границы, события, валидация помощника и прямые пересечения с кругом. Движение персонажа, ступеньки, склоны, разрешение контактов и визуальное качество не проверялись.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
CapsuleShape2DКонструктор
public CapsuleShape2D();Создаёт вертикальную капсулу с Radius=10, Height=30, MidHeight=10. Центр находится в локальном начале координат. Это ресурс геометрии, не физическое тело.
Свойства3
HeightСвойство
public float Height { get; set; }Полная высота вдоль локальной оси Y, включая оба закругления; изначально 30. Если новая высота меньше 2×Radius, радиус уменьшается до Height/2. Отрицательное значение отклоняется. Изменение испускает Changed; повтор значения — нет. Это не высота прямого участка.
MidHeightСвойство
public float MidHeight { get; set; }Высота прямого участка без закруглений: Height−2×Radius, изначально 10. Назначение сохраняет Radius и устанавливает Height=MidHeight+2×Radius. Отрицательное значение отклоняется; 0 убирает прямой участок. Setter испускает Changed даже при повторном значении. Свойство доступно в C#, хотя не показывается как обычное поле Inspector.
RadiusСвойство
public float Radius { get; set; }Радиус закруглений и половина ширины, изначально 10. Если новая величина превышает Height/2, общая высота увеличивается до 2×Radius. Отрицательное значение отклоняется. При изменении испускается Changed; при повторе значения — нет. Порядок назначения Radius и Height влияет на результат.
Методы6
GetHeightfloat
public float GetHeight();Текущая полная высота вместе с закруглениями; может измениться после назначения Radius.
floatТекущая полная высота вместе с закруглениями; может измениться после назначения Radius.
GetMidHeightfloat
public float GetMidHeight();Текущая высота прямого участка: Height−2×Radius. Вычисляется из актуальных размеров.
floatТекущая высота прямого участка: Height−2×Radius. Вычисляется из актуальных размеров.
GetRadiusfloat
public float GetRadius();Текущий радиус в локальных единицах 2D. Чтение не изменяет форму.
floatТекущий радиус в локальных единицах 2D. Чтение не изменяет форму.
SetHeightvoid
public void SetHeight(float height);Полная высота вдоль локальной оси Y, включая оба закругления; изначально 30. Если новая высота меньше 2×Radius, радиус уменьшается до Height/2. Отрицательное значение отклоняется. Изменение испускает Changed; повтор значения — нет. Это не высота прямого участка.
| Имя | Тип | По умолчанию |
|---|---|---|
height | float | — |
heightПолная высота с закруглениями, положительная и конечная. При необходимости уменьшает Radius до половины высоты.
SetMidHeightvoid
public void SetMidHeight(float midHeight);Высота прямого участка без закруглений: Height−2×Radius, изначально 10. Назначение сохраняет Radius и устанавливает Height=MidHeight+2×Radius. Отрицательное значение отклоняется; 0 убирает прямой участок. Setter испускает Changed даже при повторном значении. Свойство доступно в C#, хотя не показывается как обычное поле Inspector.
| Имя | Тип | По умолчанию |
|---|---|---|
midHeight | float | — |
midHeightКонечная неотрицательная высота прямого участка; к ней добавляется диаметр. Суммарная высота также должна оставаться конечной.
SetRadiusvoid
public void SetRadius(float radius);Радиус закруглений и половина ширины, изначально 10. Если новая величина превышает Height/2, общая высота увеличивается до 2×Radius. Отрицательное значение отклоняется. При изменении испускается Changed; при повторе значения — нет. Порядок назначения Radius и Height влияет на результат.
| Имя | Тип | По умолчанию |
|---|---|---|
radius | float | — |
radiusНовый радиус; используйте положительное конечное значение. У капсулы может увеличить Height до диаметра.