车辆发动机声音
发动机声音
发动机声音用于播放车辆的发动机。它会在一组循环音之间交叉淡化,每个循环音录制于一种发动机转速,并根据游戏中发动机的转速改变其音高。在负载下,发动机比滑行时更响。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,其中包含循环音和衰减设置,你可以跳过创建配置文件,直接使用它。
- 在 Content Browser 中点击 Add,选择 Miscellaneous,再选择 Data Asset,然后选择 CFEngine Sound Profile。在你的项目文件夹中将其命名为
MyEngineSound。 - 打开该配置文件。在 Layers 下为每个循环音添加一项。将 Sound 设为一个循环声音,RPM 设为其录制时的发动机转速,Volume 设为它的增益。每一层使用不同的 RPM。
| Engine Sound | ||
|---|---|---|
| Layers | 3 Array elements | |
| Index [ 0 ] | ||
| Sound | SW_CF_Engine_Ranger_0850 | |
| RPM | 850.0 rpm | |
| Volume | 0.7 | |
| Index [ 1 ] | ||
| Index [ 2 ] | ||
| Attenuation | SA_CF_Engine | |
- 将 Attenuation 设为一个声音衰减资产。插件的
SA_CF_Engine是示例。若没有它,发动机将保持无声。 - 可选地设置 Starter Sound(它必须循环,在发动机启动时播放)和 Shutdown Sound(它不得循环,在发动机停止时播放一次)。
- 依次打开 Edit、Project Settings、Plugins,再选择 Crushform Engine。检查 Engine Sound 是否开启,并且 Default Profile 为你希望用于未指定配置文件的车辆的那个配置文件。
| Engine Sound | ||
|---|---|---|
| Engine Sound | ||
| Default Profile | DA_CF_DefaultEngineSound | |
- 在车辆的适配器上,将 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 上。默认值即代码中的默认值。
检查是否正常工作
Section titled “检查是否正常工作”- 按 Play 并轰油门。然后打开控制台,运行
stat CrushformEngine。声音更新时会出现 Engine Audio Tick 的耗时。 - 远离车辆。当你离开衰减范围时,发动机会逐渐淡出;当你回来时,它会重新出现。
声音本身无法在截图中体现。请用耳朵判断。
发动机无声,日志提示配置文件没有 Attenuation
Section titled “发动机无声,日志提示配置文件没有 Attenuation”原因。 配置文件的 Attenuation 为空。没有它,发动机声音将保持关闭,并给出警告。
修复。 在配置文件上设置 Attenuation。插件的 SA_CF_Engine 是示例。
没有发动机声音,车辆上也没有发动机音频组件
Section titled “没有发动机声音,车辆上也没有发动机音频组件”原因。 Crushform Engine 中的 Engine Sound 关闭,或适配器上的 Engine Sound 关闭。两种情况下,适配器都不会创建发动机音频组件。
修复。 同时打开这两个开关,然后再次运行。
只有靠近车辆时才能听到发动机
Section titled “只有靠近车辆时才能听到发动机”原因。 只有当听者处于配置文件的 Attenuation 范围内时,发动机才会播放。该范围即其最大距离。
修复。 扩大衰减范围,或检查听者是否位于你预期的位置。
服务器上没有发动机声音
Section titled “服务器上没有发动机声音”原因。 发动机声音仅用于呈现。在专用服务器上它是无声的,因为服务器没有听者。
修复。 这是预期的行为。请在客户端上听发动机声音。
设置宿主没有效果
Section titled “设置宿主没有效果”原因。 游戏开始之后,SetCrushformHost 会被拒绝,日志中会说明这一点。
修复。 在游戏开始前调用 SetCrushformHost。