SoftBody3D
Деформируемое физическое тело на основе треугольного меша.
SoftBody3D симулирует точки и связи сетки. Он использует Mesh и закрепления вершин, а не обычный набор дочерних CollisionShape3D. В текущей реализации создаётся собственная изменяемая копия первой поверхности; проверьте топологию и индексы после импорта.
PointCount отражает число вершин первой поверхности и не является самостоятельным подтверждением готового физического пространства. Обращайтесь к точкам после добавления тела в мир. Закрепление, Layer/Mask и ParentCollisionIgnore решают разные задачи. Показанный пример проверен с ReckfellPhysics3D и Jolt Physics; произвольные импортированные ткани/контакты требуют своей проверки.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
SoftBody3DКонструктор
public SoftBody3D();Свойства13
CollisionLayerСвойство
public uint CollisionLayer { get; set; }Физические слои это SoftBody3D в. Объекты столкновения могут существовать в одном или более из 32 различных слоев. SoftBody3D.CollisionMask.
Примечание: Object A может обнаружить контакт с объектом B только в том случае, если объект B находится в любом из слоев объекта A сканирования. Слои и маски столкновений в документации для дополнительной информации.
CollisionMaskСвойство
public uint CollisionMask { get; set; }Физические слои это SoftBody3D сканирование. Объекты столкновения могут просканировать один или более из 32 различных слоев. SoftBody3D.CollisionLayer.
Примечание: Object A может обнаружить контакт с объектом B только в том случае, если объект B находится в любом из слоев объекта A сканирования. Слои и маски столкновений в документации для дополнительной информации.
DampingCoefficientСвойство
public float DampingCoefficient { get; set; }Коэффициент демпфирования тела. Более высокие значения будут более заметно замедлять тело при приложении сил.
DisableModeСвойство
public SoftBody3D.DisableModeEnum DisableMode { get; set; }Определяет поведение в физике, когда Entity.ProcessMode установлен в Entity.ProcessModeEnum.Disabled.
DragCoefficientСвойство
public float DragCoefficient { get; set; }Коэффициент сопротивления тела. Более высокие значения увеличивают сопротивление воздуха этого тела. Примечание: Это значение в настоящее время не используется реализацией физики Reckfell по умолчанию.
LinearStiffnessСвойство
public float LinearStiffness { get; set; }Коэффициент сопротивления изменению формы. Одинаковое значение не гарантирует одинаковый результат при иной топологии, шаге или backend. Начните с простой сетки и проверяйте деформацию/стоимость.
ParentCollisionIgnoreСвойство
public EntityPath ParentCollisionIgnore { get; set; }Путь для исключения соответствующего родительского физического объекта из столкновений. Это не закрепление ткани к скелету и не общая замена Layer/Mask.
PointCountСвойство
public int PointCount { get; }Число вершин первой поверхности текущего Mesh. Само значение не подтверждает, что произвольное тело уже добавлено в физическое пространство или симуляция начала обновлять точки.
PressureCoefficientСвойство
public float PressureCoefficient { get; set; }Коэффициент давления этого мягкого тела. Имитирует нарастание давления изнутри этого тела. Более высокие значения увеличивают силу этого эффекта.
RayPickableСвойство
public bool RayPickable { get; set; }Если true, SoftBody3D будет реагировать на RayCast3D.
ShrinkingFactorСвойство
public float ShrinkingFactor { get; set; }Масштабирует оставшиеся длины ограничений ребер SoftBody3D. Положительные значения сжимают сетку, а отрицательные расширяют ее. Например, значение 0.1 сокращает края сетки на 10%, а -0.1 расширяет края на 10%.
Примечание: SoftBody3D.ShrinkingFactor лучше всего использовать на поверхностных сетках с закрепленными точками.
SimulationPrecisionСвойство
public int SimulationPrecision { get; set; }Увеличение этого значения улучшит результаты моделирования, но может повлиять на производительность. Используйте с осторожностью.
TotalMassСвойство
public float TotalMass { get; set; }Масса SoftBody3D.
Методы41
AddCollisionExceptionWithvoid
public void AddCollisionExceptionWith(Entity body);Добавляет тело в список тел, с которыми данное тело не может столкнуться.
| Имя | Тип | По умолчанию |
|---|---|---|
body | Entity | — |
ApplyCentralForcevoid
public void ApplyCentralForce(Vector3 force);Распределяет и применяет силу ко всем точкам. Сила зависит от времени и должна применяться при каждом обновлении физики.
| Имя | Тип | По умолчанию |
|---|---|---|
force | Vector3 | — |
ApplyCentralImpulsevoid
public void ApplyCentralImpulse(Vector3 impulse);Распределяет и применяет импульс ко всем точкам. Импульс не зависит от времени! Применение импульса в каждом кадре приведет к силе, зависящей от частоты кадров. По этой причине его следует использовать только при моделировании одноразовых ударов (в противном случае используйте функции "_force").
| Имя | Тип | По умолчанию |
|---|---|---|
impulse | Vector3 | — |
ApplyForcevoid
public void ApplyForce(int pointIndex, Vector3 force);Прикладывает силу к точке. Сила зависит от времени и должна применяться при каждом обновлении физики.
| Имя | Тип | По умолчанию |
|---|---|---|
pointIndex | int | — |
force | Vector3 | — |
ApplyImpulsevoid
public void ApplyImpulse(int pointIndex, Vector3 impulse);Применяет импульс к точке. Импульс не зависит от времени! Применение импульса в каждом кадре приведет к силе, зависящей от частоты кадров. По этой причине его следует использовать только при моделировании одноразовых ударов (в противном случае используйте функции "_force").
| Имя | Тип | По умолчанию |
|---|---|---|
pointIndex | int | — |
impulse | Vector3 | — |
GetCollisionExceptionsReckfell.Collections.Array<PhysicsBody3D>
public Reckfell.Collections.Array<PhysicsBody3D> GetCollisionExceptions();Возвращает массив узлов, которые были добавлены как исключения столкновений для этого тела.
Reckfell.Collections.Array<PhysicsBody3D>GetCollisionLayeruint
public uint GetCollisionLayer();uintGetCollisionLayerValuebool
public bool GetCollisionLayerValue(int layerNumber);Возвращает, включен ли указанный слой SoftBody3D.CollisionLayer, учитывая layer_number от 1 до 32.
| Имя | Тип | По умолчанию |
|---|---|---|
layerNumber | int | — |
boolGetCollisionMaskuint
public uint GetCollisionMask();uintGetCollisionMaskValuebool
public bool GetCollisionMaskValue(int layerNumber);Возвращает, включен ли указанный слой SoftBody3D.CollisionMask, учитывая layer_number от 1 до 32.
| Имя | Тип | По умолчанию |
|---|---|---|
layerNumber | int | — |
boolGetDampingCoefficientfloat
public float GetDampingCoefficient();floatGetDisableModeSoftBody3D.DisableModeEnum
public SoftBody3D.DisableModeEnum GetDisableMode();SoftBody3D.DisableModeEnumGetDragCoefficientfloat
public float GetDragCoefficient();floatGetLinearStiffnessfloat
public float GetLinearStiffness();floatGetParentCollisionIgnoreEntityPath
public EntityPath GetParentCollisionIgnore();EntityPathGetPhysicsRidRid
public Rid GetPhysicsRid();Возвращает внутренний Rid, используемый PhysicsServer3D для этого тела.
RidGetPointCountint
public int GetPointCount();intGetPointTransformVector3
public Vector3 GetPointTransform(int pointIndex);Возвращает мировую позицию физической точки, несмотря на слово Transform в имени. Проверьте индекс и наличие тела в физическом мире; результат не является обычным transform сущности.
| Имя | Тип | По умолчанию |
|---|---|---|
pointIndex | int | — |
Vector3GetPressureCoefficientfloat
public float GetPressureCoefficient();floatGetShrinkingFactorfloat
public float GetShrinkingFactor();floatGetSimulationPrecisionint
public int GetSimulationPrecision();intGetTotalMassfloat
public float GetTotalMass();floatIsPointPinnedbool
public bool IsPointPinned(int pointIndex);Возвращает true, если вершина установлена в закрепленное состояние.
| Имя | Тип | По умолчанию |
|---|---|---|
pointIndex | int | — |
boolIsRayPickablebool
public bool IsRayPickable();boolRemoveCollisionExceptionWithvoid
public void RemoveCollisionExceptionWith(Entity body);Удаляет тело из списка тел, с которыми данное тело не может столкнуться.
| Имя | Тип | По умолчанию |
|---|---|---|
body | Entity | — |
SetCollisionLayervoid
public void SetCollisionLayer(uint collisionLayer);| Имя | Тип | По умолчанию |
|---|---|---|
collisionLayer | uint | — |
SetCollisionLayerValuevoid
public void SetCollisionLayerValue(int layerNumber, bool value);На основе value включает или отключает указанный слой в SoftBody3D.CollisionLayer, учитывая layer_number от 1 до 32.
| Имя | Тип | По умолчанию |
|---|---|---|
layerNumber | int | — |
value | bool | — |
SetCollisionMaskvoid
public void SetCollisionMask(uint collisionMask);| Имя | Тип | По умолчанию |
|---|---|---|
collisionMask | uint | — |
SetCollisionMaskValuevoid
public void SetCollisionMaskValue(int layerNumber, bool value);На основе value включает или отключает указанный слой в SoftBody3D.CollisionMask при заданном layer_number от 1 до 32.
| Имя | Тип | По умолчанию |
|---|---|---|
layerNumber | int | — |
value | bool | — |
SetDampingCoefficientvoid
public void SetDampingCoefficient(float dampingCoefficient);| Имя | Тип | По умолчанию |
|---|---|---|
dampingCoefficient | float | — |
SetDisableModevoid
public void SetDisableMode(SoftBody3D.DisableModeEnum mode);| Имя | Тип | По умолчанию |
|---|---|---|
mode | SoftBody3D.DisableModeEnum | — |
SetDragCoefficientvoid
public void SetDragCoefficient(float dragCoefficient);| Имя | Тип | По умолчанию |
|---|---|---|
dragCoefficient | float | — |
SetLinearStiffnessvoid
public void SetLinearStiffness(float linearStiffness);| Имя | Тип | По умолчанию |
|---|---|---|
linearStiffness | float | — |
SetParentCollisionIgnorevoid
public void SetParentCollisionIgnore(EntityPath parentCollisionIgnore);| Имя | Тип | По умолчанию |
|---|---|---|
parentCollisionIgnore | EntityPath | — |
SetPointPinned2 перегрузки
public void SetPointPinned(int pointIndex, bool pinned, EntityPath attachmentPath);Закрепляет/освобождает точку по индексу; attachmentPath задаёт необязательную сущность привязки. Проверьте диапазон и топологию меша. Индексы могут измениться после переимпорта/оптимизации; закрепление не заменяет фильтры коллизий.
| Имя | Тип | По умолчанию |
|---|---|---|
pointIndex | int | — |
pinned | bool | — |
attachmentPath | EntityPath | — |
public void SetPointPinned(int pointIndex, bool pinned, EntityPath attachmentPath = null, int insertAt = -1);Закрепляет/освобождает точку по индексу; attachmentPath задаёт необязательную сущность привязки. Проверьте диапазон и топологию меша. Индексы могут измениться после переимпорта/оптимизации; закрепление не заменяет фильтры коллизий.
| Имя | Тип | По умолчанию |
|---|---|---|
pointIndex | int | — |
pinned | bool | — |
attachmentPath | EntityPath | null |
insertAt | int | -1 |
SetPressureCoefficientvoid
public void SetPressureCoefficient(float pressureCoefficient);| Имя | Тип | По умолчанию |
|---|---|---|
pressureCoefficient | float | — |
SetRayPickablevoid
public void SetRayPickable(bool rayPickable);| Имя | Тип | По умолчанию |
|---|---|---|
rayPickable | bool | — |
SetShrinkingFactorvoid
public void SetShrinkingFactor(float shrinkingFactor);| Имя | Тип | По умолчанию |
|---|---|---|
shrinkingFactor | float | — |
SetSimulationPrecisionvoid
public void SetSimulationPrecision(int simulationPrecision);| Имя | Тип | По умолчанию |
|---|---|---|
simulationPrecision | int | — |
SetTotalMassvoid
public void SetTotalMass(float mass);| Имя | Тип | По умолчанию |
|---|---|---|
mass | float | — |
SoftBody3D.DisableModeEnum
| Значение | Описание |
|---|---|
KeepActive = 1 | Если |
Remove = 0 | Когда |