Перейти к содержимому
CRUSHFORMV1.1.0
ПОЛУЧИТЬ НА FAB

СПРАВОЧНИКDATA ASSET

UCFTreeConfig

МОДУЛЬCrushformBreakableЗАГОЛОВОКCFTreeConfig.hРОДИТЕЛЬUPrimaryDataAsset

Настройки одного вида разрушаемых деревьев: масса, поведение при поддаче, привод джоинта, валка, события удара и приземления, теги отклика и респаун. Геометрия коллизии берётся из меша и здесь не дублируется.

Функции

AUTHORITY · сервер, на каждом инстансеLOCAL · этот инстансPURE · только чтение
bool ValidateTreeConfig(FString& OutError) const
PUREC++ ONLY

Проверяет только инварианты, которые тихо ломаются во время выполнения. Возвращает false и заполняет OutError, если один из них нарушен. Можно вызывать во время выполнения, поэтому дерево может отказаться взводиться при некорректной конфигурации.

Свойства

float MassKg = 900.f
По умолчанию
900.f
Категория
Crushform|Tree
ECFTreeYieldMode YieldMode = ECFTreeYieldMode::FellAndFall
По умолчанию
ECFTreeYieldMode::FellAndFall
Категория
Crushform|Tree
float YieldAngleDegrees = 15.f
По умолчанию
15.f
Категория
Crushform|Tree|Yield
float FellingDriveFadeSeconds = 0.01f

Держите его на минимуме или близко к нему. Сила позиции привода в момент поддачи всё ещё почти полная и даёт возвращающий момент, несоразмерный малой ошибке угла, которая только что пересекла YieldAngleDegrees; затухание медленнее примерно одного кадра позволит ему вернуть ствол обратно ниже YieldAngleDegrees, пока за дело не возьмётся демпфирование валки. Значение, не превышающее дельту времени одного кадра (примерно 0.0167 с при 60 Hz), убирает пружину на первом шаге валки.

По умолчанию
0.01f
Категория
Crushform|Tree|Felling
float FellingDampingStrength = 3.5e8f

Режим FORCE: коэффициент демпфирования в масштабе крутящего момента, того же порядка величины, что DrivePositionStrength и DriveVelocityStrength, а не их малая доля. Темп валки нельзя вывести аналитически. Для ствола сосны массой 900 кг и привода по умолчанию минимум, создаваемый одной гравитацией, составляет около 1.3 с от поддачи до освобождения (постоянен до демпфирования около 1e5); значение по умолчанию 3.5e8 даёт около 2.7 с, примерно вдвое больше этого минимума. Перемеряйте для ствола другой формы или массы (Crushform.Trees.Felling.PacedFall измеряет темп на тестовом стволе).

По умолчанию
3.5e8f
Категория
Crushform|Tree|Felling
float ReleaseAngleDegrees = 65.f
По умолчанию
65.f
Категория
Crushform|Tree|Felling
float VehiclePassThroughDelaySeconds = 1.f

Только для FellAndFall. Отсчитывается локально на каждом инстансе с начала валки (предсказывающий клиент — от своего предсказания, подтверждающий клиент — от своего подтверждения); не реплицируется. Даёт ближайшему автомобилю время среагировать на падающий ствол, прежде чем тот перестанет мешать. 0 — переключиться сразу.

По умолчанию
1.f
Категория
Crushform|Tree|Felling
float StopAngleDegrees = 45.f

Только для BendAndLock. Ограничение качания по каждой оси: Swing1 и Swing2 получают одно и то же значение, поэтому это не простой угол от вертикали. Ствол, пришедший с реальной скоростью, садится в угол конуса, максимум примерно в sqrt(2) раз больше этого значения (около 63 градусов для конфигурации на 45 градусов); медленное, квазистатическое прибытие оседает на номинальном значении. Для худшего случая задавайте примерно целевой наклон / 1.4 и проверяйте установившийся угол в PIE при ожидаемой скорости удара.

По умолчанию
45.f
Категория
Crushform|Tree|Felling
float BendAndLockLockStrengthMultiplier = 100.f

Только для BendAndLock. Множитель DrivePositionStrength и DriveVelocityStrength, пока привод удерживает позу, в которой остановился ствол. Жёсткий конус ограничивает только то, насколько далеко ствол наклоняется, но не то, в какую сторону, поэтому столб, упёршийся в свой упор, нуждается в гораздо большей силе, чем стоящее дерево, чтобы удержать направление против бокового толчка; эффект сильно нелинейный. Измерено для ствола массой 900 кг, StopAngleDegrees 45 и толчка 8e6 kg*cm/s^2 длительностью 2 с: при 1x направление ушло на 103 градуса, при 10x — на 82, при 30x — на 61, а при 100x удержалось (5.8 градуса во время толчка, 1.8 градуса после освобождения). Множитель сохраняет соотношение жёсткости и демпфирования 1:10. Перемеряйте (Crushform.Trees.Felling.LockedAzimuthHoldsAgainstPush) для другого ствола или более сильного толчка.

По умолчанию
100.f
Категория
Crushform|Tree|Felling
float YieldConfirmTimeoutSeconds = 0.75f
По умолчанию
0.75f
Категория
Crushform|Tree|Net
float DrivePositionStrength = 5.0e8f

Возвращающая пружина упругого диапазона в обоих режимах поддачи: жёсткое ограничение конуса не даёт возвращающего момента внутри конуса, поэтому без пружины высокий ствол валится под собственным весом. Режим FORCE: сырой момент в kg*cm/s^2, не зависящий от момента инерции ствола. Режим Acceleration нормировал пружину по инерции ствола и делал её стеной, которую не мог преодолеть ни один момент автомобиля (толчок 6e6 на уровне бампера сдвинул ствол массой 900 кг на 0.66 от нужных 15 градусов). Значение по умолчанию 5e8 при DriveVelocityStrength 5e7 — самая сильная точка проверенного диапазона от 5e6 до 5e8 (демпфирование во всём диапазоне составляет десятую часть жёсткости), а не его середина: 5e7/5e6 лишь слабо удерживает стартовое отклонение в 1 градус (4.17 градуса через 15 с) и не восстанавливается после наклона в 15 градусов, так как гравитация уводит ствол быстрее, чем пружина возвращает; 5e8/5e7 сходится (0.83 градуса от того же стартового отклонения) и при этом толчок 6e6 всё ещё валит ствол примерно за 1.3 с. Слишком слабая пружина — ствол не стоит под собственным весом; слишком сильная — снова стена.

По умолчанию
5.0e8f
Категория
Crushform|Tree|Drive
float DriveVelocityStrength = 5.0e7f

Скоростная половина того же привода в режиме FORCE: сырой момент в kg*cm/s на единицу угловой скорости. Держите её на уровне DrivePositionStrength / 10 — это соотношение проверено на всём диапазоне. При перенастройке под другой ствол сохраняйте соотношение и выбирайте самую сильную точку, при которой ствол ещё стоит.

По умолчанию
5.0e7f
Категория
Crushform|Tree|Drive
float DriveForceLimit = 0.f
По умолчанию
0.f
Категория
Crushform|Tree|Drive
float BendWpoScale = 1.f
По умолчанию
1.f
Категория
Crushform|Tree|Visual
bool bFallenTrunkCollidesWithVehicles = false
По умолчанию
false
Категория
Crushform|Tree|Vehicles
float HitMinDeltaVCmS = 30.f
По умолчанию
30.f
Категория
Crushform|Tree|Events
float HitFullIntensityDeltaVCmS = 400.f
По умолчанию
400.f
Категория
Crushform|Tree|Events
float HitCooldownSeconds = 0.3f
По умолчанию
0.3f
Категория
Crushform|Tree|Events
float LandMinDeltaVCmS = 80.f
По умолчанию
80.f
Категория
Crushform|Tree|Events
float LandFullIntensityDeltaVCmS = 600.f
По умолчанию
600.f
Категория
Crushform|Tree|Events
FGameplayTag HitFeedbackTag
Категория
Crushform|Tree|Feedback
FGameplayTag YieldFeedbackTag
Категория
Crushform|Tree|Feedback
FGameplayTag LandFeedbackTag
Категория
Crushform|Tree|Feedback
float RespawnDelaySeconds = 300.f
По умолчанию
300.f
Категория
Crushform|Tree|Respawn
float RespawnClearRadiusCm = 4000.f
По умолчанию
4000.f
Категория
Crushform|Tree|Respawn
TArray<TEnumAsByte<ECollisionChannel>> RespawnBlockingObjectTypes = { ECC_Vehicle, ECC_Pawn, ECC_PhysicsBody }
По умолчанию
{ ECC_Vehicle, ECC_Pawn, ECC_PhysicsBody }
Категория
Crushform|Tree|Respawn
bool bRespawnOnlyWhenUnseen = true
По умолчанию
true
Категория
Crushform|Tree|Respawn
float RespawnUnseenHalfAngleDegrees = 70.f
По умолчанию
70.f
Категория
Crushform|Tree|Respawn
float RespawnUnseenDistanceCm = 15000.f
По умолчанию
15000.f
Категория
Crushform|Tree|Respawn
float RespawnSinkSeconds = 3.f
По умолчанию
3.f
Категория
Crushform|Tree|Respawn