版本

menu_open
Wwise Unreal Integration Documentation
通过 Blueprint 播放音乐

通过 Blueprint 发送 Event 并设置 State – BeginPlay | PostEvent | Self

在本例中,我们同样会在开始游戏时播放一些声音,只不过这次要通过 Blueprint 来实现。其中一个很好的用例就是播放音乐。我们甚至可以将其设为连续不断地进行播放。

在 Wwise 内的 Music Playlist Container 中,可在通过 "Play_Music" Event 调用时无限循环 Music Segment。

在 Unreal Editor 中,我们来将声音添加到 ThirdPersonExampleMap 关卡。此关卡已经包含各种 Actor(如 Light、Mesh),甚至还设有一个可供控制的角色。目前只需针对该关卡执行相应操作,并且 Actor 会无限期地待在场景中。因而,我们可以直接从 World Outliner 选取 Actor,并向其添加必要的音频整合设置。

注記: 若设有多个场景,最好创建一个 Persistent Level,以免音乐在加载不同的地图时停掉。

下面我们来使用与玩家角色对应的 Blueprint(已经创建并添加到 ThirdPersonCharacter)。

  1. 依次转到 World Outliner > ThirdPersonCharacter Actor,然后选择 Edit ThirdPersonCharacter

    这时将打开与 ThirdPersonCharacter 对应的 Blueprint。在此,可调用 Wwise Event。您可能会看到很多其他预先构建好的系统(如 Gamepad Input、Jump 或 Movement Input)。藉此可以控制角色,不过目前还不需要。暂时保留默认设置,找到一个空白区域。要想播放/发送 Wwise Event,需在开始游戏时调用 Unreal Event (1),然后将其连到用来播放 Wwise Event 的函数 (2),同时指定要针对哪个 Actor (3) 进行播放。

  2. 在 Event Graph 中右键单击空白区域,然后键入 BeginPlay 并选择对应的 Unreal Event。

  3. 从 BeginPlay 箭头向外拖动连线,然后键入 postevent 并选择 Post Event 函数。

    在实际起作用之前,Post Event 函数需引用 Actor,以便获知要将 Wwise Event 置于何处。

  4. 从 Actor Object Reference 向外拖动连线,然后键入 self 并选择 Get a reference to self

    这就是系统本身的设置。接下来,我们可以在 AkEvent 属性中选取 Wwise Event,以便在游戏当中予以发送。在本例中,我们将按照图示选取 "Play_Music" Event。

  5. Post Event 函数中,选择 Wwise Event。

    这样就可以使用 Blueprint 来控制对 Wwise 的调用了。注意,这是一个非常简单的例子。大部分现实场景要比这复杂得多。

使用 AkComponent

虽然 Blueprint 环境非常方便控制 Actor 的行为,但在关卡中管理和放置 Actor 时却不怎么方便。相较而言,我们希望在 Details 面板中暴露来自 Blueprint 的一些控件,以便在 Level Editor 中完成尽可能多的设置。为此,可将 AkComponent 添加到 Actor。这样便可直接在 Level Editor 中根据需要对声音的位置施加偏置。

  1. 选择 Add Component,然后搜索 Ak 并选择 Ak

  2. 在 Event Graph 中,一并删除 Post Event 函数和对 Self 的引用。

    接下来,我们要引用 AkComponent 并基于该对象发送 Event。换句话说,就是利用其确定所发送声音的位置和朝向。

  3. 将 AkComponent 拖到 Blueprint 中,然后在 Object Reference 中找到 Post Ak Event

  4. BeginPlay 连到 Post Ak Event

    接下来便可检索 AkComponent 中所选的 Wwise Event。

  5. 在 AkEvent Object Reference 中,找到 Get Ak Audio Event 并将其连到 AkComponent 引用。

  6. 编译之后,在 Details 面板中选择 Ak,然后选择相应的 Event。

    现在无需再转到 Blueprint 便可更改 Event,并对声音相对于关联 Actor 的位置施加偏置。

忽略 Occlusion

从无声到有声 练习中,我们向 Level 添加了 AkAmbientSound 并让其播放环境声。为此,我们将其添加到了 ThirdPersonCharacter 旁边。最终的效果还不错。但是,一旦走到关卡中的箱子后面,就会发现听不到声音了。下面我们来看看如何避免这一潜在问题。

  1. 找到 "AkAmbientSound" Actor。

    注意,在开始游戏时会以最大音量播放声音,但一旦走到对象后面摄像机(即听者)无法看到 Actor 位置的地方,声音便会淡出。这是因为默认启用了 Occlusion。对于环境声或音乐之类的声音,可能并不需要应用这种效果。为此,可通过把 Occlusion Refresh Interval 设为 0 来将其禁用。

  2. 在 Details 视图中,将 AkComponent > Occlusion > Occlusion Refresh Interval 设为 0。

    除此之外,倘若当前在使用 Post Event 函数发送 Wwise Event,还可在发送 Wwise Event 之前使用 SetOcclusionRefreshInterval 函数来设置此属性。

使用 State 控制音乐

在大部分情况下,我们希望在游戏中播放互动音乐,并确保其随着游戏情形自动变换。以下示例展示了常用的一种方法,也就是使用 State 来控制音乐。 在开始之前,必须在 Wwise 中构建一个新的音乐系统。按照下图所示创建 Music Switch Container,并确保可基于 “Music” State 来在 "Repeat Calm" 和 "Repeat Intense" Music Playlist 之间切换。

注意,这里设有三个 State:Calm、Intense 和 None。利用此设置,可通过设定游戏中的 State 来在运行时变换音乐。不过,在此之前最好先选择在开始游戏时要设为哪一 State。为此,我们将接着 使用 AkComponent 中执行的步骤继续操作,同时确保像在 忽略 Occlusion 中一样将 Occlusion Refresh Interval 设为 0。

为了控制初始 State 的设置,首先要在发送音乐之前设定 State。

  1. BeginPlay 向外拖动连线,然后选择 SetState 函数。

  2. 将 Initial State 设为 Music-Calm

    这样就完成了初始状态的设置。

    对于运行时状态变化,常用的一种控制音乐状态的方法是在玩家进入特定区域时设置 State(具体由 Trigger 定义)。为此,我们来创建 Box Trigger (1-2),并利用相应的 Blueprint 系统来在进入 Trigger 边界 (3-4) 时设置 State。然后,在 Details 视图 (5-6) 中暴露 State。这样后续就不用重新转到 Blueprint 了。

  3. 将 Box Trigger 拖到 Level 中。

  4. 增大 Box Trigger 的尺寸。

  5. 选择 Blueprint/Add Script (1),并赋予其合适的名称 (2),然后选择 Create Blueprint (3)。

    接下来,我们要构建 Blueprint 系统。在创建新的 Blueprint 时,将自动获取 "ActorBeginOverlap" Event。这样方便在有东西进入 Box Trigger 时加以检测。我们将使用该 Event 来检测其是否为玩家 Actor。若是,则设置 State。

  6. ActorBeginOverlap 向外拖动连线,接着赋值给 ThirdPersonCharacter,然后将 Exec 连到 Set State 函数。

    现在当然可以在 Set State 函数中选择 State,但这样便无法将此 Box Trigger 重复用于另一 State,而且后续必须重新转到 Blueprint 才能实施更改。为了避免这一问题,我们来创建一个 Variable 以便在 Blueprint 之外访问。

  7. 从 State Value 向外拖动连线,然后选择 Promote to variable

    现在可在 My Blueprint > Variables 左侧显示变量,但目前还不能在 Blueprint 之外显示。

  8. 将变量重命名为 MusicState,然后选中眼睛图标来将其设为公开状态。

  9. 选择 Compile,然后关闭 Blueprint。
  10. 在选中 Trigger 的情况下,在 Details > Default > Music State 中选取一个 State。

  11. 使用 ThirdPersonCharacter,然后走到新的 Trigger 中,等待系统变换音乐。

    接下来便可复制 Trigger,将其重复用在别处,并在不影响第一个 Trigger 的情况下设置不同的 State。

注記: 若 Music Switch Container 的 Transition 设为 Exit Cue,则可能需要稍微等一会儿才能听到音乐的变化。

此页面对您是否有帮助?

需要技术支持?

仍有疑问?或者问题?需要更多信息?欢迎联系我们,我们可以提供帮助!

查看我们的“技术支持”页面

介绍一下自己的项目。我们会竭力为您提供帮助。

来注册自己的项目,我们帮您快速入门,不带任何附加条件!

开始 Wwise 之旅