Version:

第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