АВТОМОБИЛЬАДАПТЕР АВТОМОБИЛЯ
Адаптер автомобиля
Назначение
Заголовок раздела «Назначение»Адаптер автомобиля Crushform подключает плагин к эктору с колёсами. Добавьте его один раз и перечислите колёса. Затем он создаёт вмятины и грязь, стёкла, шины, звук качения и эффекты, звук двигателя, разрушение разрушаемых объектов и отклик на удары, а также отвечает на вопросы плагина о машине. Используйте его для колёсного эктора, который не является Chaos-автомобилем, например для прицепа. Chaos-автомобилю нужен адаптер Chaos, который берёт колёса из компонента движения.
Как это работает
Заголовок раздела «Как это работает»Адаптер — один компонент на экторе. Он отвечает на вопросы плагина о машине и создаёт компоненты плагина под фиксированными именами на каждом инстансе. У каждого компонента свой переключатель, они перечислены в разделе «Основные настройки» ниже. Быстрый старт показывает компоненты по одному.
Колёса берутся из списка Wheels или из SetWheels во время игры. Каждый кадр адаптер трассирует землю под каждым колесом. Трасса начинается в ступице и заканчивается на радиусе шины плюс Ground Probe Margin, поэтому шина, которая немного не доходит до земли, всё равно её касается. Скорость колеса берётся из того, как его компонент сдвинулся с прошлого кадра, поэтому у прицепа на буксире колёса вращаются без двигателя. Пыль, которую поднимает колесо, зависит от этой скорости.
Authority решает, какой инстанс симулирует машину и засчитывает её удары:
- Server — по умолчанию. Сервер симулирует машину и отклоняет отчёты о ударах от клиентов.
- Owning Client делает источником ударов машины тот инстанс, который ею управляет. Сервер делает так, пока машиной никто не управляет. Сервер принимает сообщённый удар, только если изменение скорости не больше недавней пиковой скорости машины плюс Ram Allowance Mps. Для более лёгкого кузова, который уступает, допуск увеличивается.
На выделенном сервере адаптер не трассирует колёса, потому что там их нечем показывать.
Шины, которые упираются в препятствие
Заголовок раздела «Шины, которые упираются в препятствие»Шина, которая упирается в препятствие, пропустила бы в него обод. Адаптер сдвигает всё колесо от препятствия на выталкивание, которое запрашивает шина, поэтому шина вминается вокруг препятствия, а обод остаётся снаружи. Выталкивание ограничено UCFTireProfile::MaxPush; за этим пределом обод может войти в препятствие. Шина, у которой все контакты мельче, чем позволяет её резина, не выталкивается.
Выталкивание переводится в пространство родителя колеса один раз, когда приходит. Для колеса, родитель которого поворачивается относительно автомобиля, например поворотного кулака, выталкивание во время поворота неверно. Как отключить выталкивание для такого колеса, показано в руководстве Интерфейсы хоста.
Blueprint, который переопределяет Set Crushform Tire Wheel Offsets, расставляет колёса сам и выталкивания не получает. Тогда шина вминается так же, как без выталкивания, до своего Max Deflection, и обод может войти в препятствие.
Прицепы
Заголовок раздела «Прицепы»Прицеп — это эктор с мешами колёс и без компонента движения. Перечислите его колёса в Wheels. Адаптер берёт скорость каждого колеса из того, как оно сдвинулось с прошлого кадра, поэтому звук качения, эффекты качения и пыль работают, пока прицеп тянут, и без двигателя внутри него.
Значения для машины (пороги ударов, скорость разрушения объектов, настройки качения и двигателя, значения для салона) копируются на компоненты при регистрации адаптера. Изменение, сделанное позже в запущенной игре, до них не доходит.
Настройка
Заголовок раздела «Настройка»Шаги для самого адаптера те же, что и для собственного автомобиля, поэтому следуйте им там. Для варианта с прицепом нужны только эти отличия.
- Добавьте адаптер и перечислите колёса, как описано в Свой автомобиль, в части про адаптер автомобиля. Шаги здесь не повторяются.
| Crushform | ||
|---|---|---|
| Wheels | ||
| Wheels | 4 Array elements | |
| Index [ 0 ] | ||
| Wheel | ||
| Radius | 0.0 cm | |
| Index [ 1 ] | ||
| Wheel | ||
| Radius | 0.0 cm | |
| Index [ 2 ] | ||
| Wheel | ||
| Radius | 0.0 cm | |
| Index [ 3 ] | ||
| Wheel | ||
| Radius | 0.0 cm | |
| Ground Channel | ||
| Ground Probe Margin | 2.0 cm | |
- У прицепа нет компонента движения, поэтому список Wheels — его единственная настройка колёс. Для каждого колеса откройте его запись и выберите компонент колеса в Wheel: список показывает компоненты сцены Blueprint, поэтому ничего не нужно вводить вручную. Задайте Radius для колеса, у меша которого нет границ, как описано в таблице «Основные настройки» ниже (0 берёт половину высоты границ меша).
- Проверьте Authority и переключатели функций и здесь. Все переключатели включены по умолчанию.
| Crushform | ||
|---|---|---|
| Authority | ||
| Deform Profile | DA_CF_DefaultProfile | |
| Tire Profile | DA_CF_DefaultTireProfile | |
| Ram Allowance Mps | 15.0 m/s | |
| Features | ||
| Dirt and Dents | ||
| Glass | ||
| Tires | ||
| Rolling Sound | ||
| Rolling FX | ||
| Engine Sound | ||
| Impact Feedback | ||
| Breaks Props | ||
Использование
Заголовок раздела «Использование»В Blueprint вызовы, которые сообщают адаптеру, что делает машина, описаны в Свой автомобиль, в разделе о передаче адаптеру действий машины. График показывает SetBraking и SetCabinMuffled на CF_Adapter:
Те же вызовы в C++. Получите адаптер у эктора, затем вызовите функции. Каждая сигнатура — та, что в заголовке адаптера. Модули Crushform, которые вы вызываете, должны быть в вашем Build.cs, как в Установке.
#include "CFVehicleAdapterComponent.h"
void AMyVehicle::Tick(float DeltaSeconds){ Super::Tick(DeltaSeconds);
if (UCFVehicleAdapterComponent* Adapter = FindComponentByClass<UCFVehicleAdapterComponent>()) { Adapter->SetBraking(BrakeInput); Adapter->SetCabinMuffled(bListenerInCabin);
// The front side's deepest dent, 0 untouched to 1: the damage the server has confirmed. const float FrontMaxDent = Adapter->GetDamageZones().Front.Max; }}Чтобы прочитать повреждение в области кузова вместо стороны, вызовите GetDamageInBox с FBox в корневом пространстве владельца.
Основные настройки
Заголовок раздела «Основные настройки»Каждая строка — свойство UCFVehicleAdapterComponent, если в строке не назван другой тип. Жирным указаны подписи переключателей в панели Details. Значения — значения по умолчанию из кода.
| Свойство | Что делает | По умолчанию |
|---|---|---|
UCFVehicleAdapterComponent::Authority | Какой инстанс симулирует машину и засчитывает её удары. Server: это делает сервер и отклоняет отчёты клиентов. Owning Client: это делает инстанс, который ею управляет, и он сообщает свои удары. | Server |
UCFVehicleAdapterComponent::DeformProfile | Вмятины и грязь кузова. Пусто берёт значение по умолчанию из Project Settings, в разделе Crushform. | пусто |
UCFVehicleAdapterComponent::TireProfile | Шины. Пусто берёт значение по умолчанию из Project Settings, в разделе Crushform Tire. | пусто |
UCFVehicleAdapterComponent::bDirtAndDents | Dirt and Dents: кузов покрывается вмятинами и грязнеет. Стёкла и грязь на колёсах тоже этого требуют. | вкл. |
UCFVehicleAdapterComponent::bGlass | Glass: панели трескаются и разбиваются. Нужен Dirt and Dents, который находит панели. | вкл. |
UCFVehicleAdapterComponent::bTires | Tires: шины деформируются на мешах колёс. | вкл. |
UCFVehicleAdapterComponent::bRollingSound | Rolling Sound: каждое колесо воспроизводит звук качения своей поверхности. На выделенном сервере молчит. | вкл. |
UCFVehicleAdapterComponent::bRollingFX | Rolling FX: каждое колесо показывает эффект качения своей поверхности. На выделенном сервере его нет. | вкл. |
UCFVehicleAdapterComponent::bEngineSound | Engine Sound: двигатель воспроизводит свой звук. Также нужен переключатель звука двигателя в Crushform Engine. | вкл. |
UCFVehicleAdapterComponent::bImpactFeedback | Impact Feedback: удары воспроизводят звуки и эффекты на каждом инстансе. Вместе с Dirt and Dents воспроизводятся и удары навесных деталей. | вкл. |
UCFVehicleAdapterComponent::bBreaksProps | Breaks Props: машина ломает разрушаемые объекты, в которые въезжает. | вкл. |
UCFVehicleAdapterComponent::Wheels | Колёса, которые трассирует адаптер, по одному FCFAdapterWheel на каждое. Заменяется во время игры через SetWheels. | пусто |
FCFAdapterWheel::Wheel | Компонент колеса: меш или компонент сцены, который вращается вместе с колесом. | нет |
FCFAdapterWheel::Radius | Радиус шины в сантиметрах. 0 берёт половину высоты границ меша колеса, когда список впервые используется. | 0 см |
UCFVehicleAdapterComponent::GroundChannel | Канал, по которому колёса трассируют землю. | Visibility |
UCFVehicleAdapterComponent::GroundProbeMargin | На сколько выше земли шина всё ещё её касается, в сантиметрах. | 2 см |
UCFVehicleAdapterComponent::ImpactEventTag | Тег удара, который воспроизводит авария. Пусто — звука удара не будет. | Crushform.Impact.Vehicle.Crash |
UCFVehicleAdapterComponent::ImpactImpulsePerKgForFullIntensity | Изменение скорости, в см/с, которое воспроизводится в полную силу. | 600 см/с |
UCFVehicleAdapterComponent::ImpactMinImpulsePerKg | Изменение скорости, в см/с, ниже которого удар ничего не воспроизводит. | 50 см/с |
UCFVehicleAdapterComponent::PropContactMinSpeedCmS | Ниже этой скорости, в см/с, машина не ломает разрушаемые объекты. | 50 см/с |
UCFVehicleAdapterComponent::bOverrideRollingSoundTuning | Использовать RollingSoundTuning для этой машины вместо настроек Crushform Wheels. | выкл. |
UCFVehicleAdapterComponent::bOverrideRollingFXTuning | Использовать RollingFXTuning для этой машины вместо настроек Crushform Wheels. | выкл. |
UCFVehicleAdapterComponent::bOverrideCabinMuffling | Использовать CabinVolumeScale и CabinLowPassFrequency этой машины в SetCabinMuffled, а не значения из настроек. | выкл. |
UCFVehicleAdapterComponent::CabinVolumeScale | Громкость звука качения и двигателя внутри салона, когда переопределение включено. | 0,8 |
UCFVehicleAdapterComponent::CabinLowPassFrequency | Частота среза фильтра нижних частот для звука внутри салона, в Гц, когда переопределение включено. | 3000 Гц |
UCFVehicleAdapterComponent::EngineSoundProfile | Звук двигателя. Пусто берёт значение по умолчанию из Crushform Engine. | пусто |
UCFVehicleAdapterComponent::EngineSoundOffset | Где звучит двигатель относительно корня владельца, в сантиметрах. | ноль |
UCFVehicleAdapterComponent::RamAllowanceMps | При Owning Client: насколько быстрее недавнего пика скорости, в м/с, может быть сообщённый удар. | 15 м/с |
Адаптер Chaos, который берёт колёса из компонента движения, описан на странице Адаптер Chaos.
Проверка работы
Заголовок раздела «Проверка работы»- Нажмите Play, врежьте машину в стену и откройте консоль.
- Выполните
Crushform.Stats. Команда выводит по строке на каждое тело, которое плагин вмял. В строке вашей машины после аварии счётчикhitsбольше 0. - Выполните
stat CrushformVehicle. Время Vehicle adapter появляется, пока машина едет.
Консольные команды есть во всех сборках, кроме Shipping, и в редакторе.
Решение проблем
Заголовок раздела «Решение проблем»Стекло не трескается, и компонента CF_Glass нет
Заголовок раздела «Стекло не трескается, и компонента CF_Glass нет»Причина. Glass требует Dirt and Dents. Адаптер создаёт компонент стекла, только если включены оба переключателя.
Решение. Включите Dirt and Dents, затем перекомпилируйте и запустите игру снова.
Ничего не вмято, и OnDamageChanged не срабатывает
Заголовок раздела «Ничего не вмято, и OnDamageChanged не срабатывает»Причина. Dirt and Dents выключен. Без него адаптер не создаёт компонент CF_Deform, поэтому повреждение всегда равно нулю, и событие никогда не срабатывает.
Решение. Включите Dirt and Dents. Проверьте и Deform Profile: пусто означает профиль проекта по умолчанию.
Удары, сообщённые клиентом, игнорируются
Заголовок раздела «Удары, сообщённые клиентом, игнорируются»Причина. Authority стоит на Server, который отклоняет каждый отчёт о ударе от клиента.
Решение. Поставьте Authority на Owning Client для машины, которой управляет игрок. Оставьте Server для машины, которую сервер симулирует один.
Колесо пропускается, и в логе написано, что у него нет радиуса или не назван компонент
Заголовок раздела «Колесо пропускается, и в логе написано, что у него нет радиуса или не назван компонент»Причина. Radius колеса равен 0, а у меша нет границ, по которым его можно было бы взять, или в записи Wheel не указан компонент.
Решение. Задайте Radius в сантиметрах и выберите компонент колеса в Wheel.
Изменение смещения звука двигателя или порогов удара в запущенной игре ничего не меняет
Заголовок раздела «Изменение смещения звука двигателя или порогов удара в запущенной игре ничего не меняет»Причина. Адаптер копирует эти значения в свои компоненты при их создании. Изменение у запущенной машины до них не доходит.
Решение. Задайте значение до появления машины или в значениях по умолчанию Blueprint, затем создайте новую машину.