reckfellENGINE

PathFollow3D

Управляемое кодом положение и ориентация по Curve родительского Path3D.

На этой странице
class PathFollow3DReckfellSharpНаследует Entity3D

Поместите PathFollow3D прямым ребёнком Path3D с пригодной Curve3D, а объект — ребёнком последователя. После входа в дерево задайте Progress или ProgressRatio. Движение не запускается автоматически: для локальной скорости обновляйте Progress += speed * (float)delta в выбранном цикле обработки. Это transform-следование; физические коллизии нужно решать отдельно.

Progress — расстояние, ratio — его доля от текущей baked-длины. Loop повторяет расстояние, но не соединяет открытую геометрию. Родительский масштаб меняет world-скорость. Ранее заданный вне дерева Progress может не нормализоваться на входе, а повтор того же значения в 3D не обновляет transform.

RotationMode=None сбрасывает вращение при обновлении; остальные режимы корректируют кадр пути. UseModelFront переключает +Z/−Z и ось HOffset. Tilt применяется после коррекции осей и может добавить roll при режиме Y. Offset и масштаб — разные операции. Без Curve прежний transform может сохраниться, а ratio стать 0; это не достижение начала.

Проверены малые невырожденные пути и прямые изменения transform в Windows headless. Движение с физическими столкновениями, тайминг анимации, вертикальные/вырожденные orientation cases, gizmos и графика не проверялись.

Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.

Конструкторы1

PathFollow3DКонструктор
# PathFollow3D
C#
public PathFollow3D();

Создаёт Entity3D-последователь с Loop/CubicInterp/TiltEnabled=true, RotationMode=Xyz, UseModelFront=false. Нужен прямой родитель Path3D внутри дерева с пригодной Curve3D. Меняйте Progress самостоятельно; это перемещение transform без физического collision-solving.

Свойства9

CubicInterpСвойство
# CubicInterp
C#
public bool CubicInterp { get; set; }

Кубическая интерполяция baked-кеша, default true. Это не точная Bezier-выборка и не настройка физики; на редком кеше позиция может отличаться от линейного расстояния. Setter меняет флаг без немедленного пересчёта transform. Настройте его до изменения Progress; в 3D повтор того же Progress также не обновляет transform.

HOffsetСвойство
# HOffset
C#
public float HOffset { get; set; }

Смещение вдоль локальной X итогового кадра пути после RotationMode/UseModelFront/tilt. UseModelFront меняет знак X и направление такого смещения. Применяется до восстановления собственного Scale последователя; Path3D scale всё равно влияет на world-позицию.

LoopСвойство
# Loop
C#
public bool Loop { get; set; }

При назначении Progress повторяет расстояние по длине; false ограничивает 0..length. Ненулевое кратное длины сохраняется на конце, не обязательно на нуле. Не соединяет концы или касательные открытой геометрии и не включает движение. Само переключение флага не нормализует ранее сохранённое расстояние.

ProgressСвойство
# Progress
C#
public float Progress { get; set; }

Расстояние по baked-кривой родительского Path в локальных единицах, не секунды. Для скорости обновляйте Progress на speed×delta сами; автоматического движения нет. При активном пути setter применяет Loop/clamp. Значение, заданное до входа в дерево, может остаться вне диапазона: инициализируйте после подключения Path/Curve. Масштаб родителя меняет мировую скорость.

ProgressRatioСвойство
# ProgressRatio
C#
public float ProgressRatio { get; set; }

Доля текущей baked-длины: setter передаёт ratio×length в Progress. Требуется прямой родитель Path внутри дерева, Curve и ненулевая длина. Значения вне 0..1 подчиняются Loop/clamp, а не отдельно ограничиваются. Getter без пригодного пути возвращает 0, что не доказывает достижение начала. При изменении длины сохраняется расстояние, не прежняя доля.

RotationModeСвойство
# RotationMode
C#
public PathFollow3D.RotationModeEnum RotationMode { get; set; }

Корректирует базис: None сбрасывает вращение при обновлении, Y оставляет только Euler Y, Xy убирает roll Z, Xyz оставляет все оси; вычисления используют порядок YXZ. Oriented заново строит базис по касательной с Y-up, не сохраняя входной roll. TiltEnabled применяется ПОСЛЕ коррекции и может вернуть наклон при Y/Xy. Для Oriented учитывайте предупреждение о Curve.UpVectorEnabled; вырожденные/вертикальные случаи здесь не доказаны.

TiltEnabledСвойство
# TiltEnabled
C#
public bool TiltEnabled { get; set; }

Добавляет tilt Curve3D в радианах после RotationMode и UseModelFront. Поэтому Y-only не гарантирует отсутствие roll при включённом tilt. При RotationMode=None этот этап пропускается. Не задаёт новые tilt-точки кривой.

UseModelFrontСвойство
# UseModelFront
C#
public bool UseModelFront { get; set; }

При включённой ориентации переключает model front на +Z вместо −Z, переворачивая X/Z базиса. Также меняет направление HOffset. Не меняет геометрию Curve или длину и не действует в RotationMode=None.

VOffsetСвойство
# VOffset
C#
public float VOffset { get; set; }

Смещение вдоль локальной Y итогового кадра пути, не обязательно world-up. При наклоне Curve оно тоже поворачивается; задавайте конечные локальные единицы.

Методы19

CorrectPostureTransform3D
# CorrectPosture
C#
public static Transform3D CorrectPosture(Transform3D transform, PathFollow3D.RotationModeEnum rotationMode);

Статически корректирует Basis входного Transform3D по RotationMode, сохраняя Origin. None ставит единичный Basis; Y/Xy/Xyz пересобирают из нормализованных Euler YXZ; Oriented строит Y-up по −Basis.Z. Не сэмплирует кривую, не применяет UseModelFront/tilt и не сохраняет произвольный scale входного Basis как обещанный контракт. Возвращает значение, не меняет Entity.

Параметры
ИмяТипПо умолчанию
transformTransform3D—
rotationModePathFollow3D.RotationModeEnum—
transform

Transform3D с пригодным направлением/базисом; результат нужно использовать явно.

rotationMode

None, Y, Xy, Xyz или Oriented; смысл осей и tilt указан в описании.

Возвращает Transform3D

Новый Transform3D с сохранённым Origin и скорректированным Basis.

GetCubicInterpolationbool
# GetCubicInterpolation
C#
public bool GetCubicInterpolation();

Читает CubicInterp. Кубическая интерполяция baked-кеша, default true. Это не точная Bezier-выборка и не настройка физики; на редком кеше позиция может отличаться от линейного расстояния. Setter меняет флаг без немедленного пересчёта transform. Настройте его до изменения Progress; в 3D повтор того же Progress также не обновляет transform.

Возвращает bool

Сохранённая настройка указанного метода; не сигнал движения/готовности.

GetHOffsetfloat
# GetHOffset
C#
public float GetHOffset();

Читает HOffset. Смещение вдоль локальной X итогового кадра пути после RotationMode/UseModelFront/tilt. UseModelFront меняет знак X и направление такого смещения. Применяется до восстановления собственного Scale последователя; Path3D scale всё равно влияет на world-позицию.

Возвращает float

Сохранённая настройка указанного метода; не сигнал движения/готовности.

GetProgressfloat
# GetProgress
C#
public float GetProgress();

Читает Progress. Расстояние по baked-кривой родительского Path в локальных единицах, не секунды. Для скорости обновляйте Progress на speed×delta сами; автоматического движения нет. При активном пути setter применяет Loop/clamp. Значение, заданное до входа в дерево, может остаться вне диапазона: инициализируйте после подключения Path/Curve. Масштаб родителя меняет мировую скорость.

Возвращает float

Сохранённое локальное расстояние, не секунды/процент.

GetProgressRatiofloat
# GetProgressRatio
C#
public float GetProgressRatio();

Читает ProgressRatio. Доля текущей baked-длины: setter передаёт ratio×length в Progress. Требуется прямой родитель Path внутри дерева, Curve и ненулевая длина. Значения вне 0..1 подчиняются Loop/clamp, а не отдельно ограничиваются. Getter без пригодного пути возвращает 0, что не доказывает достижение начала. При изменении длины сохраняется расстояние, не прежняя доля.

Возвращает float

Progress / текущая длина, либо 0 без пригодного пути; не событие достижения.

GetRotationModePathFollow3D.RotationModeEnum
# GetRotationMode
C#
public PathFollow3D.RotationModeEnum GetRotationMode();

Читает RotationMode. Корректирует базис: None сбрасывает вращение при обновлении, Y оставляет только Euler Y, Xy убирает roll Z, Xyz оставляет все оси; вычисления используют порядок YXZ. Oriented заново строит базис по касательной с Y-up, не сохраняя входной roll. TiltEnabled применяется ПОСЛЕ коррекции и может вернуть наклон при Y/Xy. Для Oriented учитывайте предупреждение о Curve.UpVectorEnabled; вырожденные/вертикальные случаи здесь не доказаны.

Возвращает PathFollow3D.RotationModeEnum

Сохранённая настройка указанного метода; не сигнал движения/готовности.

GetVOffsetfloat
# GetVOffset
C#
public float GetVOffset();

Читает VOffset. Смещение вдоль локальной Y итогового кадра пути, не обязательно world-up. При наклоне Curve оно тоже поворачивается; задавайте конечные локальные единицы.

Возвращает float

Сохранённая настройка указанного метода; не сигнал движения/готовности.

HasLoopbool
# HasLoop
C#
public bool HasLoop();

Читает Loop. При назначении Progress повторяет расстояние по длине; false ограничивает 0..length. Ненулевое кратное длины сохраняется на конце, не обязательно на нуле. Не соединяет концы или касательные открытой геометрии и не включает движение. Само переключение флага не нормализует ранее сохранённое расстояние.

Возвращает bool

Сохранённая настройка указанного метода; не сигнал движения/готовности.

IsTiltEnabledbool
# IsTiltEnabled
C#
public bool IsTiltEnabled();

Читает TiltEnabled. Добавляет tilt Curve3D в радианах после RotationMode и UseModelFront. Поэтому Y-only не гарантирует отсутствие roll при включённом tilt. При RotationMode=None этот этап пропускается. Не задаёт новые tilt-точки кривой.

Возвращает bool

Сохранённая настройка указанного метода; не сигнал движения/готовности.

IsUsingModelFrontbool
# IsUsingModelFront
C#
public bool IsUsingModelFront();

Читает UseModelFront. При включённой ориентации переключает model front на +Z вместо −Z, переворачивая X/Z базиса. Также меняет направление HOffset. Не меняет геометрию Curve или длину и не действует в RotationMode=None.

Возвращает bool

Сохранённая настройка указанного метода; не сигнал движения/готовности.

SetCubicInterpolationvoid
# SetCubicInterpolation
C#
public void SetCubicInterpolation(bool enabled);

Устанавливает CubicInterp. Кубическая интерполяция baked-кеша, default true. Это не точная Bezier-выборка и не настройка физики; на редком кеше позиция может отличаться от линейного расстояния. Setter меняет флаг без немедленного пересчёта transform. Настройте его до изменения Progress; в 3D повтор того же Progress также не обновляет transform.

Параметры
ИмяТипПо умолчанию
enabledbool—
enabled

Новое значение флага; его область действия и момент обновления указаны в описании метода.

SetHOffsetvoid
# SetHOffset
C#
public void SetHOffset(float hOffset);

Устанавливает HOffset. Смещение вдоль локальной X итогового кадра пути после RotationMode/UseModelFront/tilt. UseModelFront меняет знак X и направление такого смещения. Применяется до восстановления собственного Scale последователя; Path3D scale всё равно влияет на world-позицию.

Параметры
ИмяТипПо умолчанию
hOffsetfloat—
hOffset

Конечное смещение в локальном кадре, который зависит от режима ориентации.

SetLoopvoid
# SetLoop
C#
public void SetLoop(bool loop);

Устанавливает Loop. При назначении Progress повторяет расстояние по длине; false ограничивает 0..length. Ненулевое кратное длины сохраняется на конце, не обязательно на нуле. Не соединяет концы или касательные открытой геометрии и не включает движение. Само переключение флага не нормализует ранее сохранённое расстояние.

Параметры
ИмяТипПо умолчанию
loopbool—
loop

Включает wrapping при последующих назначениях Progress; не замыкает геометрию.

SetProgressvoid
# SetProgress
C#
public void SetProgress(float progress);

Задаёт конечное локальное расстояние и обновляет transform при активном Path3D. В 1.0.0 одинаковое сохранённому значение возвращается ДО нормализации: повторное присваивание не исправит Progress, заданный вне дерева, и не заставит обновиться transform. Инициализируйте после готовности пути и проверяйте границы.

Параметры
ИмяТипПо умолчанию
progressfloat—
progress

Конечное локальное расстояние, не время; Loop/clamp применяются только при пригодном родительском пути.

SetProgressRatiovoid
# SetProgressRatio
C#
public void SetProgressRatio(float ratio);

Устанавливает ProgressRatio. Доля текущей baked-длины: setter передаёт ratio×length в Progress. Требуется прямой родитель Path внутри дерева, Curve и ненулевая длина. Значения вне 0..1 подчиняются Loop/clamp, а не отдельно ограничиваются. Getter без пригодного пути возвращает 0, что не доказывает достижение начала. При изменении длины сохраняется расстояние, не прежняя доля.

Параметры
ИмяТипПо умолчанию
ratiofloat—
ratio

Конечная доля baked-длины; значения вне 0..1 подчиняются правилу Loop.

SetRotationModevoid
# SetRotationMode
C#
public void SetRotationMode(PathFollow3D.RotationModeEnum rotationMode);

Устанавливает RotationMode. Корректирует базис: None сбрасывает вращение при обновлении, Y оставляет только Euler Y, Xy убирает roll Z, Xyz оставляет все оси; вычисления используют порядок YXZ. Oriented заново строит базис по касательной с Y-up, не сохраняя входной roll. TiltEnabled применяется ПОСЛЕ коррекции и может вернуть наклон при Y/Xy. Для Oriented учитывайте предупреждение о Curve.UpVectorEnabled; вырожденные/вертикальные случаи здесь не доказаны.

Параметры
ИмяТипПо умолчанию
rotationModePathFollow3D.RotationModeEnum—
rotationMode

None, Y, Xy, Xyz или Oriented; смысл осей и tilt указан в описании.

SetTiltEnabledvoid
# SetTiltEnabled
C#
public void SetTiltEnabled(bool enabled);

Устанавливает TiltEnabled. Добавляет tilt Curve3D в радианах после RotationMode и UseModelFront. Поэтому Y-only не гарантирует отсутствие roll при включённом tilt. При RotationMode=None этот этап пропускается. Не задаёт новые tilt-точки кривой.

Параметры
ИмяТипПо умолчанию
enabledbool—
enabled

Новое значение флага; его область действия и момент обновления указаны в описании метода.

SetUseModelFrontvoid
# SetUseModelFront
C#
public void SetUseModelFront(bool enabled);

Устанавливает UseModelFront. При включённой ориентации переключает model front на +Z вместо −Z, переворачивая X/Z базиса. Также меняет направление HOffset. Не меняет геометрию Curve или длину и не действует в RotationMode=None.

Параметры
ИмяТипПо умолчанию
enabledbool—
enabled

Новое значение флага; его область действия и момент обновления указаны в описании метода.

SetVOffsetvoid
# SetVOffset
C#
public void SetVOffset(float vOffset);

Устанавливает VOffset. Смещение вдоль локальной Y итогового кадра пути, не обязательно world-up. При наклоне Curve оно тоже поворачивается; задавайте конечные локальные единицы.

Параметры
ИмяТипПо умолчанию
vOffsetfloat—
vOffset

Конечное смещение в локальном кадре, который зависит от режима ориентации.

PathFollow3D.RotationModeEnum

ЗначениеОписание
None = 0

При обновлении PathFollow3D сбрасывает вращение к единичному базису, сохраняя собственный scale отдельно. Не сохраняет ручной угол как Rotates=false у 2D. UseModelFront и tilt в этой ветке не применяются.

Oriented = 4

В текущей реализации CorrectPosture пересобирает кадр по касательной −Basis.Z с Y-up через looking_at, не сохраняя входной roll/up-базис целиком. Оставьте Curve.UpVectorEnabled согласно предупреждению редактора; это не обещание сохранения всех cached up-векторов после коррекции. Затем могут применяться UseModelFront и tilt. Вертикальные/вырожденные случаи здесь не проверены.

Xy = 2

При коррекции Euler YXZ сохраняет X/Y и обнуляет Z. Наклон Curve при TiltEnabled добавляется после коррекции, поэтому результат не обязан оставаться без roll.

Xyz = 3

Использует все оси скорректированного кадра пути; default PathFollow3D. Это не сохранение произвольной ручной ориентации объекта: базис берётся из Curve, затем учитываются UseModelFront и tilt.

Y = 1

Оставляет Euler Y при коррекции базиса в порядке YXZ. TiltEnabled применяется позднее и может добавить roll; отключите tilt, если он не нужен. Это правило локального кадра пути, не physics-ограничение вращения.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.