SeparationRayShape2D
Специальный луч для разделения контактов, направленный по +Y.
SeparationRayShape2D — ресурс формы для разделения контактов, а не самостоятельный RayCast2D. Луч начинается в локальном (0,0) и направлен к (0,Length), то есть по +Y. Length по умолчанию 20. Положение и направление задаются трансформацией пользователя формы. Для обычного поиска объектов лучом используйте RayCast2D или запрос пространства.
SlideOnSlope по умолчанию false: разделение направлено вдоль луча. При true решатель направляет его по нормали найденной поверхности. В прямом тесте на наклонённом прямоугольнике флаг изменил контактную пару. Это не подтверждение готового поведения персонажа на ступенях или склонах: оно зависит от тела и логики движения.
Если луч целиком внутри другой формы, контакта может не быть: текущий решатель отбрасывает такой случай. Это проверено на луче длиной 20 внутри прямоугольника 100×100. Не используйте форму как универсальную проверку нахождения внутри геометрии. Пары луч–луч также не дают обычного контакта по исходникам.
Length должен быть положительным и конечным; setter сам не выполняет эти проверки. Length/SlideOnSlope испускают Changed только при новом значении. GetRect() содержит дополнительные поля для отладочного изображения: его ширина не равна физической толщине луча.
Для коллайдера ресурс назначается Shape у CollisionShape2D внутри непосредственного родителя CollisionObject2D. Сам ресурс не ищет тела и не добавляет их в мир.
Проверены значения, события, поля GetRect(), направление +Y, пары контактов и влияние SlideOnSlope в прямом запросе. Движение персонажа, непрерывные столкновения, интерфейс редактора и изображение не проверялись.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
SeparationRayShape2DКонструктор
public SeparationRayShape2D();Создаёт специальную форму разделяющего луча: Length=20, SlideOnSlope=false, направление локальная +Y. Это не RayCast2D и не самостоятельный поиск объектов мира.
Свойства2
LengthСвойство
public float Length { get; set; }Длина вдоль локальной +Y от начала (0,0), изначально 20. Направление меняется трансформацией формы, а не отдельным свойством направления. Setter не проверяет положительность и конечность: проверяйте вход и используйте положительное конечное значение. Изменение испускает Changed; повтор значения — нет.
SlideOnSlopeСвойство
public bool SlideOnSlope { get; set; }Изначально false: контактное разделение направлено вдоль луча. При true решатель использует нормаль встреченной поверхности для направления разделения, что влияет на скольжение по склонам. Это не автоматический контроллер персонажа и не изменение направления луча. Изменение испускает Changed; повтор значения — нет.
Методы4
GetLengthfloat
public float GetLength();Сохранённая длина луча вдоль локальной +Y.
floatСохранённая длина луча вдоль локальной +Y.
GetSlideOnSlopebool
public bool GetSlideOnSlope();Текущий флаг использования нормали поверхности для разделения.
boolТекущий флаг использования нормали поверхности для разделения.
SetLengthvoid
public void SetLength(float length);Длина вдоль локальной +Y от начала (0,0), изначально 20. Направление меняется трансформацией формы, а не отдельным свойством направления. Setter не проверяет положительность и конечность: проверяйте вход и используйте положительное конечное значение. Изменение испускает Changed; повтор значения — нет.
| Имя | Тип | По умолчанию |
|---|---|---|
length | float | — |
lengthПоложительная конечная длина луча в локальных единицах.
SetSlideOnSlopevoid
public void SetSlideOnSlope(bool active);Изначально false: контактное разделение направлено вдоль луча. При true решатель использует нормаль встреченной поверхности для направления разделения, что влияет на скольжение по склонам. Это не автоматический контроллер персонажа и не изменение направления луча. Изменение испускает Changed; повтор значения — нет.
| Имя | Тип | По умолчанию |
|---|---|---|
active | bool | — |
activetrue для разделения по нормали поверхности, false для разделения вдоль луча.