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

АВТОМОБИЛЬЗВУК ДВИГАТЕЛЯ

Звук двигателя

Звук двигателя воспроизводит двигатель автомобиля. Он плавно переходит между набором петель, каждая из которых записана на одних оборотах двигателя, и меняет их высоту тона под обороты двигателя в игре. Под нагрузкой двигатель звучит громче, чем на накате. Звук воспроизводит компонент Crushform Engine Audio. Адаптер автомобиля и адаптер Chaos создают его для машины как CF_EngineAudio.

Петли. UCFEngineSoundProfile содержит петли как слои. Слой — это одна зацикленная звуковая дорожка, обороты двигателя, на которых она записана, и её громкость. Компонент сортирует слои по оборотам. Он переходит между двумя петлями вокруг оборотов двигателя и меняет высоту тона каждой петли под обороты в игре. Высота остаётся между Min Pitch и Max Pitch. По умолчанию аудиоустройство ограничивает высоту тона диапазоном от 0,4 до 2,0, поэтому эти два значения действуют только внутри него.

Нагрузка. Без газа двигатель играет на Coast Volume. При полном газе он играет на полной громкости. Громкость переходит между ними по мере изменения нагрузки.

Состояние работы. Компонент раз в кадр спрашивает у host-объекта двигателя машины его состояние: выключен, прокручивается или работает. Пока двигатель прокручивается, звучит Starter Sound в цикле, а петли двигателя молчат. Когда двигатель работает, петли нарастают за Start Fade Seconds. Когда он останавливается, они затихают за Stop Fade Seconds, и один раз проигрывается Shutdown Sound.

Слышимость. Двигатель звучит, только пока слушатель находится в пределах дальности Attenuation профиля. Вне слышимости звуки останавливаются. Когда слушатель возвращается, двигатель звучит так, как звучит в этот момент, без нарастания или остановки, которые слушатель пропустил.

Салон. Слушатель внутри салона слышит двигатель тише и глуше. SetCabinMuffled адаптера приглушает и двигатель. Отдельный компонент вызывает SetCabinMuffling сам.

Только для показа игроку. На выделенном сервере звук двигателя молчит, потому что там некого слушать. Без Attenuation у профиля звук остаётся выключенным, и лог об этом сообщает.

Этот пример делает звук двигателя для вашей машины. Плагин поставляет профиль по умолчанию DA_CF_DefaultEngineSound с его петлями и затуханием, так что профиль можно пропустить и использовать его.

  1. В Content Browser нажмите Add, выберите Miscellaneous, затем Data Asset, и выберите CFEngine Sound Profile. Назовите его MyEngineSound в папке вашего проекта.
  2. Откройте профиль. В разделе Layers добавьте по записи на каждую петлю. Задайте Sound — зацикленный звук, RPM — обороты, на которых он записан, и Volume — его усиление. Для каждого слоя задайте свои RPM.
Engine Sound
Layers3 Array elements
Index [ 0 ]850.0 rpm
SoundSW_CF_Engine_Ranger_0850
RPM850.0 rpm
Volume0.7
Index [ 1 ]2010.0 rpm
Index [ 2 ]2930.0 rpm
AttenuationSA_CF_Engine
Слои DA_CF_DefaultEngineSound: первый слой раскрыт, под ними виден Attenuation.
  1. Задайте Attenuation — ассет sound attenuation. Образец плагина — SA_CF_Engine. Без него двигатель молчит.
  2. По желанию задайте Starter Sound (он должен быть зацикленным, и играет, пока двигатель прокручивается) и Shutdown Sound (он не должен быть зацикленным, и играет один раз, когда двигатель останавливается).
  3. Откройте Edit, затем Project Settings, затем Plugins, затем Crushform Engine. Проверьте, что Engine Sound включён и что Default Profile — тот профиль, который нужен машинам без своего.
Engine Sound
Engine Sound
Default ProfileDA_CF_DefaultEngineSound
Группа Engine Sound в Project Settings, в разделе Plugins > Crushform Engine.
  1. На адаптере машины задайте Engine Sound Profile как MyEngineSound или оставьте пустым для значения по умолчанию. Задайте Engine Sound Offset, чтобы переместить звук в позицию двигателя. Включите Engine Sound.

Сохранение профиля запускает его проверки. Они сообщают о профиле без слоёв, о слое без звука или со звуком, который не зациклен, о двух слоях с одинаковыми оборотами, об отсутствии Attenuation, о минимальной высоте тона выше максимальной и о звуке остановки, который зациклен.

В Blueprint обычная задача — приглушить двигатель, когда слушатель сидит в салоне. График получает аудиокомпонент двигателя от адаптера через Get Engine Audio на CF_Adapter, затем вызывает Set Cabin Muffling на нём с масштабом громкости 0,5 и частотой среза фильтра нижних частот 1200 Гц. У машины с адаптером Set Cabin Muffled на самом адаптере приглушает звук качения и двигатель вместе — со значениями из настроек или, когда его переопределение включено, со значениями самого адаптера.

График получает аудио двигателя от адаптера и приглушает его в салоне.

Те же вызовы в C++. Найдите компонент на машине, затем вызовите его функцию. Сигнатура — та, что в заголовке. Ваш модуль должен перечислить модули Crushform в Build.cs, как в Установке.

#include "CFEngineAudioComponent.h"
void AMyVehicle::SetListenerInCabin(const bool bInCabin)
{
if (UCFEngineAudioComponent* Audio = FindComponentByClass<UCFEngineAudioComponent>())
{
// The volume scale and the low-pass cutoff in Hz, applied while muffled.
Audio->SetCabinMuffling(bInCabin, 0.5f, 1200.f);
}
}

Host-объект двигателя, объект, который отвечает на вопросы о состоянии двигателя, задаётся в C++ вызовом SetCrushformHost до начала игры компонента. Его явный host-объект имеет приоритет над host-объектом из реестра для владельца.

Значения профиля находятся в UCFEngineSoundProfile, настройки — в UCFEngineSettings, а настройки адаптера — в UCFVehicleAdapterComponent. Значения по умолчанию — из кода.

СвойствоЧто делаетПо умолчанию
UCFEngineSoundProfile::LayersПетли, в любом порядке. Слой без звука пропускается.пусто
FCFEngineSoundLayer::SoundЗацикленный звук двигателя на одних постоянных оборотах.нет
FCFEngineSoundLayer::RPMОбороты двигателя, на которых записана петля, в об/мин. Петля играет со своей высотой тона на этих оборотах.1000 об/мин
FCFEngineSoundLayer::VolumeУсиление петли при её полной доле в миксе.1,0
UCFEngineSoundProfile::AttenuationСпад громкости и пространственное звучание всех звуков. Без него звук двигателя молчит.пусто
UCFEngineSoundProfile::CoastVolumeДоля полной громкости при нулевой нагрузке.0,6
UCFEngineSoundProfile::RPMInterpSpeedНасколько быстро слышимые обороты следуют за оборотами двигателя, в 1/с. 0 — сразу.8
UCFEngineSoundProfile::LoadInterpSpeedНасколько быстро громкость следует за нагрузкой, в 1/с. 0 — сразу.5
UCFEngineSoundProfile::MinPitchСамая низкая высота тона, до которой замедляется петля.0,5
UCFEngineSoundProfile::MaxPitchСамая высокая высота тона, до которой ускоряется петля.2,0
UCFEngineSoundProfile::StartFadeSecondsСколько секунд петли нарастают от тишины, когда двигатель заработал. 0 — сразу.0,4 с
UCFEngineSoundProfile::StopFadeSecondsСколько секунд петли затухают, когда двигатель остановился. 0 — сразу.1 с
UCFEngineSoundProfile::StarterSoundЗвучит в цикле, пока двигатель прокручивается. Пусто — тихий запуск.пусто
UCFEngineSoundProfile::ShutdownSoundЗвучит один раз, когда работающий двигатель выключается. Пусто — ничего.пусто
UCFEngineSettings::bEngineSoundEngine Sound: главный переключатель. Выключен — двигатель не звучит ни у одной машины.вкл.
UCFEngineSettings::DefaultProfileПрофиль для двигателя, который не назвал свой.DA_CF_DefaultEngineSound
UCFEngineSettings::SoundClassКласс звуков двигателя. Пусто — Master.пусто
UCFEngineSettings::PriorityПриоритет воспроизведения звуков двигателя. Он выше, чем у звука качения, поэтому тихая шина уступает двигателю.0,5
UCFEngineSettings::CabinVolumeScaleГромкость двигателя внутри салона.0,8
UCFEngineSettings::CabinLowPassFrequencyЧастота среза фильтра нижних частот для двигателя внутри салона, в Гц.3000 Гц
UCFVehicleAdapterComponent::bEngineSoundEngine Sound на адаптере. Также нужен главный переключатель в Crushform Engine.вкл.
UCFVehicleAdapterComponent::EngineSoundProfileПрофиль этой машины. Пусто берёт UCFEngineSettings::DefaultProfile.пусто
UCFVehicleAdapterComponent::EngineSoundOffsetГде звучит двигатель относительно корня владельца, в сантиметрах.ноль
  1. Нажмите Play и поддайте газу. Затем откройте консоль и выполните stat CrushformEngine. Появится время Engine Audio Tick, пока звук обновляется.
  2. Отъезжайте от машины. Двигатель затихает, когда вы выходите за пределы дальности затухания, и возвращается, когда вы возвращаетесь.

Звук сам по себе на скриншоте не виден. Оцените его на слух.

Двигатель молчит, и в логе написано, что у профиля нет Attenuation

Заголовок раздела «Двигатель молчит, и в логе написано, что у профиля нет Attenuation»

Причина. Attenuation профиля пуст. Без него звук двигателя остаётся выключенным, с предупреждением.

Решение. Задайте Attenuation в профиле. Образец плагина — SA_CF_Engine.

Звука двигателя нет, и на машине нет компонента аудио двигателя

Заголовок раздела «Звука двигателя нет, и на машине нет компонента аудио двигателя»

Причина. Либо Engine Sound выключен в Crushform Engine, либо Engine Sound выключен на адаптере. В обоих случаях адаптер не создаёт компонент аудио двигателя.

Решение. Включите оба переключателя и запустите игру снова.

Двигатель слышно, только когда вы близко к машине

Заголовок раздела «Двигатель слышно, только когда вы близко к машине»

Причина. Двигатель звучит, только пока слушатель находится в пределах дальности Attenuation профиля — то есть его наибольшего расстояния.

Решение. Увеличьте дальность затухания или проверьте, что слушатель находится там, где вы ожидаете.

Причина. Звук двигателя нужен только для показа игроку. На выделенном сервере он молчит, потому что там нет слушателя.

Решение. Это ожидаемо. Слушайте двигатель на клиенте.

Причина. SetCrushformHost отклоняется, как только компонент начал игру, и лог сообщает об этом.

Решение. Вызывайте SetCrushformHost до начала игры компонента.