跳转到内容
CRUSHFORMV1.1.0
在 Fab 上获取

车辆发动机声音

发动机声音

发动机声音用于播放车辆的发动机。它会在一组循环音之间交叉淡化,每个循环音录制于一种发动机转速,并根据游戏中发动机的转速改变其音高。在负载下,发动机比滑行时更响。Crushform Engine Audio 组件负责播放该声音。车辆适配器和 Chaos 适配器会为车辆创建一个,名为 CF_EngineAudio。

循环音。 UCFEngineSoundProfile 把这些循环音保存为若干层。一层包括一个循环播放的声音、录制时的发动机转速,以及它的音量。组件会按转速对各层排序,在发动机转速前后的两个循环音之间进行淡化,并将每个循环音的音高调整为游戏中的转速。音高保持在 Min Pitch 和 Max Pitch 之间。音频设备默认将音高限制在 0.4 到 2.0 之间,因此这两个值只能在该范围内生效。

负载。 没有油门时,发动机以 Coast Volume 播放。油门全开时,发动机以满音量播放。音量会随负载在两者之间变化。

运行状态。 组件每帧向车辆的发动机宿主询问一次状态:关闭、启动中或运行中。发动机启动时,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 的 Layers,展开了第一层,其下方是 Attenuation。
  1. 将 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
Project Settings 中 Plugins > Crushform Engine 下的 Engine Sound 分组。
  1. 在车辆的适配器上,将 Engine Sound Profile 设为 MyEngineSound,或留空以使用默认值。设置 Engine Sound Offset 可将声音移到发动机的位置。开启 Engine Sound。

保存配置文件时会运行其检查。它会报告以下问题:配置文件没有任何层;某一层没有声音,或其声音不循环;两层的转速相同;没有衰减设置;最低音高高于最高音高;熄火音会循环。

在蓝图中,常见的任务是在听者位于车厢内时为发动机隔音。图表通过 CF_Adapter 上的 Get Engine Audio 获取适配器的发动机音频组件,然后在其上调用 Set Cabin Muffling,音量比例为 0.5,低通截止频率为 1200 Hz。在带有适配器的车辆上,适配器上的 Set Cabin Muffled 会同时为滚动声音和发动机声音隔音,使用设置中的值;若其覆盖已开启,则使用适配器自身的值。

图表从适配器获取发动机音频,并在车厢内为其隔音。

C++ 中的相同调用。先在车辆上找到该组件,然后调用其函数。签名以头文件中的为准。你的模块必须在 Build.cs 中列出 Crushform 模块,参见安装。

#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);
}
}

发动机的宿主,即回答发动机状态的对象,在 C++ 中通过 SetCrushformHost 设置,且须在游戏开始前进行。它明确指定的宿主优先于注册表为该拥有者提供的宿主。

配置文件的值位于 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::bEngineSound适配器上的 Engine Sound。同时还需要 Crushform Engine 中的总开关。开
UCFVehicleAdapterComponent::EngineSoundProfile此车辆的配置文件。留空则取 UCFEngineSettings::DefaultProfile。空
UCFVehicleAdapterComponent::EngineSoundOffset发动机声音的播放位置,相对于拥有者的根部,单位为厘米。零
  1. 按 Play 并轰油门。然后打开控制台,运行 stat CrushformEngine。声音更新时会出现 Engine Audio Tick 的耗时。
  2. 远离车辆。当你离开衰减范围时,发动机会逐渐淡出;当你回来时,它会重新出现。

声音本身无法在截图中体现。请用耳朵判断。

发动机无声,日志提示配置文件没有 Attenuation

Section titled “发动机无声,日志提示配置文件没有 Attenuation”

原因。 配置文件的 Attenuation 为空。没有它,发动机声音将保持关闭,并给出警告。

修复。 在配置文件上设置 Attenuation。插件的 SA_CF_Engine 是示例。

没有发动机声音,车辆上也没有发动机音频组件

Section titled “没有发动机声音,车辆上也没有发动机音频组件”

原因。 Crushform Engine 中的 Engine Sound 关闭,或适配器上的 Engine Sound 关闭。两种情况下,适配器都不会创建发动机音频组件。

修复。 同时打开这两个开关,然后再次运行。

只有靠近车辆时才能听到发动机

Section titled “只有靠近车辆时才能听到发动机”

原因。 只有当听者处于配置文件的 Attenuation 范围内时,发动机才会播放。该范围即其最大距离。

修复。 扩大衰减范围,或检查听者是否位于你预期的位置。

原因。 发动机声音仅用于呈现。在专用服务器上它是无声的,因为服务器没有听者。

修复。 这是预期的行为。请在客户端上听发动机声音。

原因。 游戏开始之后,SetCrushformHost 会被拒绝,日志中会说明这一点。

修复。 在游戏开始前调用 SetCrushformHost。