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

ПОВРЕЖДЕНИЯНАВЕСНЫЕ ДЕТАЛИ

Навесные детали

Дверь, капот или багажник висит на шарнирах, и авария может их расшатать. Вмятина на детали заставляет её качнуться на шарнире. Более сильная авария или удар, который рвёт джоинт, отрывает её. На этой странице описано, когда это происходит и как настроить шарнир и его крепления. Сами вмятины описаны в Вмятинах и решётке.

Деталь, на которую пришлась только вмятина, остаётся на шарнире и открывается. Деталь, смятая достаточно сильно, отрывается и лежит там, где упала. Она лежит Detached Lifetime (60 с), затем проваливается и прячется за Detached Sink Time (2 с).

Три отладочных удара по 18 м/с: дверь получает вмятины, открывается и отрывается.
  • Состояния. Навесная деталь находится в одном из состояний: закреплена, качается на джоинте или отделена. Она закреплена, пока вмятина её не расшатает.
  • Деталь. Деталь — это один статический меш прямо под шарниром. Стёкла и ручки висят под деталью и двигаются вместе с ней.
  • Над чем измеряется вмятина. Шарнир читает три значения из решётки. Max — самая глубокая вмятина в коробке детали. Mean — среднее по этой коробке. Pin — самая глубокая вмятина в пределах Pin Radius от штифта шарнира.
  • Качание. Когда Max достигает Swing Threshold (8 см), деталь расшатывается и качается на том креплении, рядом с которым вмятин меньше всего.
  • Успокоение. В течение Swing Settle Time (1 с) после того, как деталь расшаталась, джоинт не может оторваться и деталь не может быть стряхнута. Вмятина глубже порога отрыва не ждёт этого времени.
  • Отрыв сразу. Когда Mean достигает Detach Mean Threshold (20 см) или Pin достигает Detach Pin Threshold (30 см), деталь отрывается прямо в аварии. Если UCFSettings::CollisionDeferFrames равно 1 (по умолчанию), деталь начинает качаться или отрывается в кадре после аварии, а не в нём.
  • Разрыв. Качающийся джоинт рвётся, когда сила на его штифте превышает Break Force (9200 Н) или момент превышает Break Torque (5200 Н·м). Значение 0 означает, что джоинт никогда не рвётся. Рвать джоинт может только инстанс, который решает повреждения, а отрыв передаётся остальным.
  • Стряхивание. Когда Shake Off Travel больше 0, деталь, которая в сумме качнулась на столько градусов, после времени успокоения отрывается.
  • Удержание на месте. Оторванная деталь остаётся на своём месте, пока другой автомобиль находится в пределах Torn Part Hold Margin (20 см) от него или быстро приближается. Она падает, когда тот автомобиль отъедет, поэтому не отрывается между двумя кузовами. Она также ждёт, пока коллизия кузова будет вырезана вокруг её места. В течение кадра (двух, если она оторвалась, пока шла другая сборка коллизии) она может висеть на месте или продолжать качаться на шарнире, прежде чем упадёт, чтобы никогда не начинать внутри кузова. Если UCFSettings::CollisionDeferFrames равно 0, она не ждёт выреза: падает в кадре, когда отрывается, если только её не удерживает автомобиль.
  • Крепления. Mounts — это точки, на которых деталь может висеть, когда расшаталась, например два конца бампера. Без них деталь качается вокруг собственной оси шарнира на угол Open Angle.
  • Звук. Качающаяся деталь, которая врезается в упор, проигрывает звук и эффект удара о конец хода через отклик на удары по детали, когда у автомобиля включены Impact Feedback и Dirt and Dents. См. Отклик на удары.
  • Профиль. Hinged Parts в профиле включает всё это. Если выключить, детали никогда не качаются и не отрываются.
  • Ремонт. Ремонт возвращает каждую оторванную деталь туда, где её поставил Blueprint.
  1. В Blueprint автомобиля поставьте меш двери прямо под CFHinge. Добавьте компонент через Add в группе Crushform. Расположите компонент в штифте шарнира: его местоположение — это штифт, а ось Z — направление штифта.
  2. Пометьте деталь, например CF_NoDeform, и укажите этот тег в Exclude Tags профиля. Решётка закрепляется на кузове при начале игры, поэтому деталь, которая двигается относительно кузова, не должна с ним прогибаться.
  3. На шарнире оставьте значения по умолчанию: Open Angle 70, Part Mass 20 кг, Swing Threshold 8, Detach Mean Threshold 20, Detach Pin Threshold 30 и Pin Radius 40. Нижний из двух порогов отрыва держите ниже Max Displacement профиля и ниже Max Depth зон вокруг детали. Иначе вмятина никогда не оторвёт деталь, и лог выдаст предупреждение.
  4. Для бампера, который висит на двух концах, добавьте крепление на каждый конец. Во вьюпорте Blueprint щёлкните правой кнопкой по шарниру и выберите Add Mount из меню Hinge Mounts. Первое крепление копирует собственный штифт шарнира; следующие начинаются в середине детали. Пункты Duplicate, Delete и Mirror появляются в этом меню, только когда крепление выбрано: сначала щёлкните по кольцу крепления. Duplicate копирует его на 10 см дальше по длинной стороне детали, Mirror добавляет его отражение относительно середины детали, а Delete (или клавиша Delete) удаляет его. То же меню и гизмо работают для шарнира, выбранного на экторе уровня. В Play In Editor крепления видны, но их нельзя править.
Hinge
Open Angle70.0
Part Mass22.0
Dented Part Collision
Swing Threshold8.0
Detach Mean Threshold20.0
Detach Pin Threshold30.0
Pin Radius40.0
Break Force9200.0
Break Torque5200.0
Mounts0 Array element
Группа Hinge у шарнира двери. Open Angle — 70, Part Mass — 22.
Выбранное крепление на шарнире двери автомобиля: жёлтое кольцо с гизмо перемещения и открытое меню Hinge Mounts рядом с пунктами Add Mount, Duplicate, Delete и Mirror.
Выбранное крепление и меню Hinge Mounts.
  1. В профиле оставьте Hinged Parts включённым.

События Blueprint у шарнира: On Started Swinging (деталь расшаталась), On Detached (она оторвалась; bHiddenAtOnce равно true, если деталь уже была оторвана, когда этот инстанс впервые увидел автомобиль, например у игрока, который подключился позже), On Reattached (ремонт вернул деталь на место) и On Stop Hit (качающаяся деталь ударилась о конец своего хода). Они срабатывают на каждом инстансе, который ведёт физику шарнира, никогда не на выделенном сервере, и доходят до Blueprint на следующем тике таймера. Get State и Get Part читают шарнир. Blueprint читает, насколько повреждена деталь, через Get Damage in Box, который возвращает Max и Mean вмятин в коробке как доли Max Displacement профиля. Граф ниже вызывает его у адаптера седана и печатает самую глубокую вмятину, Max. Вызов Repair, который возвращает навесные детали, описан в Вмятинах и решётке.

Граф вызывает Get Damage in Box у адаптера седана и печатает самую глубокую вмятину, Max.

Из C++ у шарнира есть два делегата. Этот код различает удар двери об упор и её отрыв:

// Called on every machine that runs the hinge's physics, when a swinging part slams into an end of its travel.
void AMyCar::OnDoorSlam(UCFHingeComponent* Hinge, const FCFHingeStopHit& Hit)
{
UE_LOG(LogTemp, Log, TEXT("%s slammed at %.0f cm/s"), *Hinge->GetName(), Hit.Speed);
}
// Called once when a swinging joint tears.
void AMyCar::OnPartTorn(UCFHingeComponent* Hinge)
{
UE_LOG(LogTemp, Log, TEXT("%s came off"), *Hinge->GetName());
}
// In BeginPlay, for each hinge:
Hinge->OnStopHit.AddUObject(this, &AMyCar::OnDoorSlam);
Hinge->OnTorn.AddUObject(this, &AMyCar::OnPartTorn);
СвойствоЧто делаетПо умолчанию
UCFHingeComponent::OpenAngleХод от закрытого до полностью открытого положения, градусы.70
UCFHingeComponent::PartMassМасса детали, пока она качается или лежит свободно, кг.20
UCFHingeComponent::SwingThresholdСамая глубокая вмятина вокруг детали, см, при которой она начинает качаться.8
UCFHingeComponent::DetachMeanThresholdСредняя вмятина по детали, см, которая её отрывает.20
UCFHingeComponent::DetachPinThresholdСамая глубокая вмятина в пределах Pin Radius от штифта, см, которая отрывает деталь.30
UCFHingeComponent::PinRadiusНа каком расстоянии от штифта вмятина считается вмятиной у штифта, см.40
UCFHingeComponent::BreakForceСила на штифте, Н, которая отрывает качающуюся деталь. 0 — никогда.9200
UCFHingeComponent::BreakTorqueМомент на штифте, Н·м, который отрывает качающуюся деталь. 0 — никогда.5200
UCFHingeComponent::MountsТочки, на которых деталь висит, когда расшаталась.Пусто
UCFHingeComponent::ShakeOffTravelГрадусы, на которые деталь должна качнуться в сумме, прежде чем её можно стряхнуть. 0 — никогда.0
UCFProfile::bHingedPartsВыкл.: навесные детали никогда не качаются, не отрываются и не рвут джоинт.Вкл.
UCFSettings::SwingSettleTimeСекунды после того, как деталь расшаталась, прежде чем её джоинт может порваться.1
UCFSettings::DetachedLifetimeСекунды, которые оторванная деталь лежит, прежде чем уйдёт в землю.60
UCFSettings::DetachedSinkTimeСекунды, за которые деталь уходит в землю на свою высоту и прячется.2
UCFSettings::TornPartHoldMarginРасстояние, см, которое другой автомобиль должен держать от места оторванной детали, чтобы она оставалась там.20
  1. Откройте Proving Ground в Play In Editor, со второй машиной, настроенной с шарниром и профилем выше, в поле зрения вашей машины. Команда пропускает машину, которой вы управляете. Наведите камеру своей машины на дверь второй машины и введите Crushform.DebugImpact 18, удар на 18 м/с. Он попадает туда, куда указывает центр экрана, в первый кузов на линии прицеливания. Чтобы навести на машину по имени, введите Crushform.DebugImpact 18 <car name>: тогда удар уйдёт в кузов, ближайший к середине этой машины, и это не всегда дверь.
  2. Дверь открывается. Output Log, в разделе LogCrushform, показывает строку, когда деталь расшаталась, и другую, когда её качание началось.
  3. Введите Crushform.DebugImpact 18 ещё раз. Один удар вдавливает не больше Max Dent Per Hit (20 см), поэтому дверь потребует повторных ударов, чтобы оторваться. Или проведите машину на скорости в стену. Дверь отрывается и лежит на земле.
  4. Введите Crushform.RepairAll. Каждая деталь возвращается на свой шарнир.

Crushform.DebugImpact и Crushform.RepairAll — это читы: они работают во всех сборках, кроме Shipping, и в редакторе.

Причина. Самая глубокая вмятина в коробке детали остаётся ниже Swing Threshold. Либо Hinged Parts выключены в профиле, и тогда ни одна деталь не качается.

Решение. Ударьте по детали сильнее или понизьте Swing Threshold. Проверьте, что Hinged Parts включены.

Причина. Значение Shake Off Travel слишком мало для Open Angle детали. Когда время успокоения прошло, деталь, которая в сумме качнулась больше, чем на Shake Off Travel, стряхивается. Собственное открытие детали входит в этот ход.

Решение. Задайте Shake Off Travel, равный двум-трём значениям Open Angle, или 0, чтобы никогда не стряхивать деталь.

Оторванная деталь висит в воздухе рядом с другой машиной

Заголовок раздела «Оторванная деталь висит в воздухе рядом с другой машиной»

Причина. Это удержание, а не ошибка. Другой автомобиль находится в пределах Torn Part Hold Margin от места детали или приближается, поэтому деталь ждёт там и падает, когда машина отъедет.

Решение. Понизьте Torn Part Hold Margin, если хотите, чтобы она падала раньше. Деталь, которую отпустили, когда машина ещё стоит рядом, может вылететь из кузова или застрять в нём.

Причина. Какой-то порог отрыва глубже самой глубокой вмятины, которую профиль допускает вокруг детали: Max Displacement или Max Depth зоны. Тогда лог выдаёт предупреждение с глубиной, которая нужна детали.

Решение. Понизьте порог или поднимите Max Displacement или Max Depth зоны до нужного значения.