本文内容
第30章 介绍Audio组件
第30章 介绍Audio组件
介绍
到目前为止,我们创建了一个 Wwise 工程,添加了一个欢呼音效,并将控制它的声音事件导入到工程中。本章将介绍如何播放声音。我们需要执行以下作:
- 添加音频组件:Audio Trigger、Audio Proxy 和 Audio Listener(可选)。
- 使用控制 “cheer” 音效的事件填充它们。
- 进球时使用 Script Canvas 播放“欢呼”音效。
注意:You can find the code and the assets for this chapter on GitHub: https://github.com/AMZN-Olex/O3DEBookCode2111/tree/ch30_audio_components
Audio Trigger 组件
在关卡上创建一个新实体,例如 Goal Cheering。添加 Audio Trigger 组件。它用于触发播放和停止音效。
缺少 Audio Trigger 的依赖项
具有音频触发器的实体需要音频代理组件。
空音频组件
默认的 ‘play’ 和 ‘stop’ 触发器是控制事件。对于我们的欢呼音效,它们需要Play_Cheer,并Stop_Cheer我们在 Audio Controls Editor 中添加的事件。
分配两个触发器后,我们就完成了 Audio Trigger 组件的配置。
已完成的 Audio Trigger 组件
Audio Trigger 组件可以通过其带有 AudioTriggerComponentRequest 总线的事件总线进行控制。在 Script Canvas 中,您可以通过将“On Team Scored”节点与 Audio Play 节点连接起来来调用触发器,其方式与我们在第 27 章 Script Canvas 中使用的方式类似。
例 30.1.从 Script Canvas 播放 Trigger
- 将脚本另存为 MyProject\scriptcanvas\cheer.scriptcanvas
- 在 “Goal Cheering” 实体上,添加 Script Canvas 组件。
- 分配新脚本。
现在,每次进球时,都会播放欢呼音效。
AudioTriggerComponentRequestBus
我们还可以使用 EBus AudioTriggerComponentRequestBus 播放 C++ 中的音效。
您可以在 LmbrCentral\Audio\AudioTriggerComponentBus.h 中找到它。这是本章有趣的部分。
例 30.2.AudioTriggerComponentBus.h
class AudioTriggerComponentRequests
: public AZ::ComponentBus
{
public:
//! Executes the play trigger if set.
virtual void Play() = 0;
//! Kills the play trigger if no stop trigger is set.
//! Otherwise Executes the stop trigger.
virtual void Stop() = 0;
因此,如果实体上有一个 C++ 组件和一个 Audio Trigger 组件,则可以按以下方式调用它:
例 30.3.从 C++ 播放声音
AudioTriggerComponentRequestBus::Event(GetEntityId(), &AudioTriggerComponentRequestBus::Events::Play);
Audio Proxy Component
Audio Trigger (音频触发器) 组件控制播放声音效果,而 Audio Proxy (音频代理) 组件是音效支架。它确定声音位置等。默认情况下,音效位置遵循实体的位置。Audio Proxy 的事件总线是 LmbrCentral\Audio\Audio\AudioProxyComponentBus.h 中“LmbrCentral”Gem 中的 AudioProxyComponentRequestBus。例如,您可以手动设置位置或更改移动行为。
class AudioProxyComponentRequests
: public AZ::ComponentBus
{
public:
//...
virtual void SetMovesWithEntity(bool shouldTrackEntity) = 0;
//! Set the position of the audio proxy directly.
virtual void SetPosition(const Audio::SATLWorldPosition& p) = 0;
Audio Listener Component
默认声音侦听器位于 (0,0,0) 坐标处。要指定位置,请使用 Audio Listener 组件。音频侦听器组件的常见位置是摄像机实体或角色实体。
如果未在 Audio Listener 组件上指定 “Rotation Entity” 和 “Position Entity”,则实体的位置将用作音频侦听器的位置。或者,您可以指定 Chicken 实体。
小结
本章中没有 C++ 代码,因为我们使用 Script Canvas 将“On Team Scored”通知事件与播放音效联系起来。
注意:您可以在 GitHub 上找到本章的代码和资源: https://github.com/AMZN-Olex/O3DEBookCode2111/tree/ch30_audio_components