ПОВРЕЖДЕНИЯВМЯТИНЫ И РЕШЁТКА
Вмятины и решётка
Достаточно сильный удар вдавливает металл кузова, и вмятина остаётся, пока её не отремонтируют. Один Data Asset, профиль, задаёт форму каждой вмятины. На этой странице разобраны настройки, которые формируют вмятину, и способы ремонта кузова. Решётка, которая держит вмятину, атлас, который её рисует, и путь от физического контакта до удара описаны в Основных понятиях. Если эти слова незнакомы, сначала прочитайте её.
Что это делает
Заголовок раздела «Что это делает»Панель, которая получила удар, проваливается в том месте, куда пришёлся удар. Металл сминается как лист: вмятина тянется от контакта гармошкой, растекается по месту удара и становится глубже по мере того, как удар сильнее, до предела. Слабое касание кузов не трогает.
Краска стирается в тех же местах. См. Краска и царапины.
Как это работает
Заголовок раздела «Как это работает»- Удар. Удар — это изменение скорости кузова вдоль нормали контакта, в м/с. Кузов получает вмятину, только если удар быстрее Min Delta V (
UCFProfile::MinDeltaV, 0.5 м/с). Более медленный контакт вмятины не оставляет. - Глубина. Один удар выдавливает Stiffness (
UCFProfile::Stiffness, 3 см на м/с) за каждый м/с сверх Min Delta V, но не глубже Max Dent Per Hit (UCFProfile::MaxDentPerHit, 20 см). При значениях по умолчанию удар 15 м/с требует 43.5 см и получает 20 см. Ограничение удерживает один удар заметно ниже Max Displacement, поэтому повторные удары всё равно углубляют вмятину. - Ширина. Радиус вмятины — это Base Radius (
UCFProfile::BaseRadius, 30 см) плюс Radius Per Delta V (1.5 см на м/с), умноженное на скорость удара. Он никогда не меньше 1.25 ячейки решётки. Lateral Scale (1.5) расширяет вмятину поперёк удара. Широкие короткие вмятины выглядят как смятый металл, узкие и круглые — как резина. - Складка. Удар в одну точку, например в столб, сминает металл за местом контакта. Crumple Ratio (3) задаёт, как далеко, кратно глубине вмятины. Удар, который растекается по плоскому участку, например по стене, наоборот, прижимает поверхность ровно.
- Рваный край. Noise Amount (0.3) случайно снимает немного глубины с каждого узла, поэтому сильная авария оставляет рваный металл, а не ровную пластину. Drag Fraction (0.3) тянет вмятину вдоль поверхности, когда удар скользит.
- Предел. Ни один узел не уходит дальше Max Displacement (
UCFProfile::MaxDisplacement, 60 см). Материалы кузова должны использовать то же число как границу смещения. Основные понятия описывают эту связку. - Ремонт.
UCFDeformComponent::Repairубирает все вмятины и царапины на всех инстансах и возвращает навесные детали и стёкла на место. Работает он только на сервере (это авторити), остальные инстансы повторяют за ним. Грязь остаётся.Washубирает грязь. - Автоматический ремонт. Auto Repair Delay (
UCFSettings::AutoRepairDelay) ремонтирует кузов через столько секунд после последнего повреждения. По умолчанию 0, что означает «никогда».
Настройка
Заголовок раздела «Настройка»Эти шаги создают профиль вмятин. Настройка автомобиля такая же, как в Быстром старте.
- В Content Browser выберите Add > Miscellaneous > Data Asset, укажите CFProfile и назовите ассет в своём проекте.
- Откройте профиль. Оставьте Dents включённым и начните со значений по умолчанию из таблицы ниже. Resolution в группе Lattice — это число узлов решётки по каждой оси. Каждая ось должна быть кратна 4, а проверка ассета предупреждает, если решётка не умещается в один слот атласа.
| Lattice | ||
|---|---|---|
| Resolution | 1688 | |
| Lattice Margin | 10.0 | |
| Use Explicit Bounds | ||
| Explicit Bounds | ||
| Min Radius in Cells | 1.25 | |
| Components | ||
| Include Tags | 0 Array element | |
| Exclude Tags | 0 Array element | |
| Dents | ||
| Dents | ||
| Deform Collision | ||
| Hinged Parts | ||
| Dented Part Collision | ||
| Min Delta V | 0.5 | |
| Stiffness | 3.0 | |
| Max Dent Per Hit | 20.0 | |
| Base Radius | 30.0 | |
| Radius Per Delta V | 1.5 | |
| Lateral Scale | 1.5 | |
| Crumple Ratio | 3.0 | |
| Drag Fraction | ||
| Noise Amount | ||
| Bulge | ||
| Bulge Down Share | ||
| Max Displacement | 60.0 | |
| Stiffness Zones | 0 Array element | |
- Передайте кузову профиль. Адаптер автомобиля сам создаёт deform-компонент: выберите адаптер и задайте Deform Profile. Собственный эктор получает CFDeform через Add в группе Crushform, с Profile, который указывает на ассет. Без профиля компонент ничего не делает.
- Подключите материалы кузова, как в Быстром старте, шаг 1. Меш, у которого материал не подключён, не двигается.
Использование
Заголовок раздела «Использование»Blueprint восстанавливает кузов одним вызовом, Repair. Граф ниже выполняется, когда срабатывает пользовательское событие RepairCar. Он получает deform-компонент, который держит адаптер седана, через Get Deform, и вызывает на нём Repair.
Из C++ удар, который физика не зафиксировала, например объект, который кузов сломал, не касаясь его, передаётся через ApplyWorldHit:
// A 12 m/s hit where the prop stood. Only the machine that simulates the body applies it.const FVector PropLocation = Prop->GetActorLocation();const bool bApplied = Deform->ApplyWorldHit(PropLocation, FVector::UpVector, 12.0f);ApplyWorldHit возвращает false, когда точка лежит за пределами решётки, когда удар слишком мягкий для вмятины или когда этот инстанс не может применять удары к кузову.
Основные настройки
Заголовок раздела «Основные настройки»| Свойство | Что делает | По умолчанию |
|---|---|---|
UCFProfile::bDents | Выкл.: удары и прижатия не оставляют ни вмятин, ни царапин. Грязь продолжает работать. | Вкл. |
UCFProfile::MinDeltaV | Изменение скорости, м/с, ниже которого удар не оставляет вмятины. | 0.5 |
UCFProfile::Stiffness | Глубина вмятины, см, на каждый м/с сверх Min Delta V. | 3 |
UCFProfile::MaxDentPerHit | Самая большая глубина вмятины от одного удара, см, при жёсткости зоны 1. | 20 |
UCFProfile::BaseRadius | Радиус вмятины при нулевой скорости, см. | 30 |
UCFProfile::RadiusPerDeltaV | Радиус, который добавляется на каждый м/с удара, см. | 1.5 |
UCFProfile::LateralScale | Расширяет вмятину поперёк удара. | 1.5 |
UCFProfile::CrumpleRatio | Насколько далеко точечный удар сминает металл, кратно его глубине. | 3 |
UCFProfile::NoiseAmount | Случайная доля глубины точечного удара, которая снимается с каждого узла, до 0.9. | 0.3 |
UCFProfile::MaxDisplacement | Наибольшее смещение любого узла, см. Материалы кузова используют его как границу смещения. | 60 |
UCFSettings::AutoRepairDelay | Секунды после последнего повреждения до самостоятельного ремонта кузова. 0 — никогда. | 0 |
Проверка работы
Заголовок раздела «Проверка работы»Откройте Proving Ground в Play In Editor. Команда пропускает машину, которой вы управляете, поэтому целью будет вторая машина: поставьте в поле зрения машину, настроенную с профилем выше, и запомните её имя так, как его показывает World Outliner.
- Введите
Crushform.DebugImpact 15 <car name>, заменив<car name>на имя этой машины. Удар 15 м/с придётся по названной машине с того места, где вы стоите, а в логе появится строкаit is now damaged. - Введите
Crushform.Debug 2. Решётка показывается как узлы и балки. Каждый недавний удар оставляет синюю сферу со стрелкой нормали на несколько секунд. - Введите
Crushform.RepairAll. В логе появится число отремонтированных кузовов, и вмятины исчезнут.
Crushform.Debug, Crushform.DebugImpact и Crushform.RepairAll — это читы: они работают во всех сборках, кроме Shipping, и в редакторе.
Решение проблем
Заголовок раздела «Решение проблем»Удар не оставляет вмятины
Заголовок раздела «Удар не оставляет вмятины»Причина. Изменение скорости равно Min Delta V или меньше него. Вмятина появляется только при ударе сильнее порога.
Решение. Понизьте Min Delta V или ударьте сильнее. Чтобы проверить сам кузов, выполните Crushform.DebugImpact 15 <car name> по нему (см. «Проверка работы»). Если он получает вмятину, значит, удар в игре был слишком мягким.
Вмятина мельче удара
Заголовок раздела «Вмятина мельче удара»Причина. Max Dent Per Hit ограничивает один удар 20 см по умолчанию. Более сильный удар не углубляет вмятину сверх этого предела.
Решение. Увеличьте Max Dent Per Hit, оставив его заметно ниже Max Displacement, чтобы повторные удары всё равно углубляли вмятину.
Вмятины пропадают сами собой
Заголовок раздела «Вмятины пропадают сами собой»Причина. Auto Repair Delay больше 0. Кузов ремонтируется через столько секунд после последнего повреждения.
Решение. Установите Auto Repair Delay в 0 в Project Settings > Plugins > Crushform, в разделе Repair, или задайте нужную задержку.
Вмятины есть на одних панелях и никогда не появляются на других
Заголовок раздела «Вмятины есть на одних панелях и никогда не появляются на других»Причина. Include Tags и Exclude Tags профиля фильтруют меши, которые прогибаются. Меш с исключённым тегом никогда не получает вмятин, а деталь, которая двигается относительно кузова, должна быть исключена.
Решение. Проверьте теги компонента панели и два списка в профиле.