Wwise 版本
Wwise SDK 2018.1.11
集成详情——切换开关

简介

Swtich(切换开关)是在游戏动作或环境变化时提供全新声音的变换。切换开关系统有一个目的:以游戏对象为基础驱动 Switch Container(切换容器)。

示例:切换开关组

例如,如果地面纹理设为切换开关,则由地面纹理来决定当脚踏上去时将播放的声音:

Switch Group(切换开关组)可以是:

  • Ground(地面)

此组的切换开关可以是:

  • Gravel(砾石)
  • Metal(金属)
  • Sand(沙子)

如果两个不同的角色在某时刻处于两种不同的地面纹理上,则各角色的切换开关状态会不一样。

切换开关设置

如果切换开关组没有当前切换开关,切换开关组会使用默认的切换开关。这种情况可能发生在游戏开始或开发期间。如果游戏代码引用一个不存在的切换开关,则切换容器将使用默认切换开关。例如,如果声音设计师为更改容器而移除了切换开关,但没有通知音频程序员,则代码中将保留该切换开关。当在游戏中执行该代码时,代码所引用的切换开关不存在了,因此将使用默认切换开关。

驱动切换开关

有三个选项可用于驱动切换开关:SDK AK::SoundEngine::SetSwitch() 方法、在 Wwise 事件中生成的“SetSwitch”动作或 RTPC。然而,组合使用这些选项可能会出问题。例如,如果声音设计师在他们创建的事件中使用 SetSwitch 动作,而音频程序员使用 SDK AK::SoundEngine::SetSwitch() 命令驱动切换开关,则这些切换开关可能会变得难以控制。我们强烈建议声音设计师和音频程序员一起决定如何驱动实际切换开关,不管是针对各个切换开关组还是整个工程。如果已就变换切换开关的方式达成了一致意见,则可同时使用所有三种方式。例如,音频程序员可使用 SDK AK::SoundEngine::SetSwitch() 命令对切换开关初始化,但在游戏其它地方由事件来驱动切换开关。

使用 AK::SoundEngine::SetSwitch() 设置切换开关

有两种方式可使用 SDK 来设置切换开关:使用字符串(unicode 或 ansi)或使用 ID。

使用字符串可以提高代码的可读性,适合在开发期间或者通常使用字符串的环境中使用。使用 ID 可避免查询字符串,并可节省用于存储字符串的内存。

使用 SDK 设置切换开关无非就是调用函数:

L"Ground",
L"Gravel",
myGameObject1
);

或者

AK::SWITCHES::GROUND::GROUP,
AK::SWITCHES::GROUND::SWITCH::GRAVEL,
myGameObject1
);

SetSwitch() 函数的第三个参数是应用切换开关的目标游戏对象。当使用此游戏对象触发包含播放动作的事件时,它将使用指定的切换开关选择切换容器中要播放的内容。 如果未对游戏对象设置切换开关,游戏对象则将使用切换容器选项中指定的默认切换开关。

注意,当游戏对象被注销时,它当前的切换开关也会被删除。如果稍后再使用该游戏对象,则必须重置此切换开关。

有关更多信息,请参阅 集成详情——游戏对象

启用 ID

要使用 ID,必须在选中 Wwise 中 Generate SoundBanks 对话框上的“Generate header file”选项的情况下生成 SoundBank。名为 Wwise_IDs.h 的定义文件中包含所有必要的 ID。每次生成 SoundBank 时都会更新此文件。

对比切换开关和状态

State Group(状态组)和 Swtich Group(切换开关组)之间的主要区别是游戏中的每个游戏对象使用不同的切换开关。状态与切换开关的另一个区别是当切换开关变换时,只会影响切换容器。当状态变换时,它可能影响切换容器,但也可能更改各种其它对象(声音、角色混音器、总线等)的参数。

Tip: 如果要在游戏中做全局的切换,并应用于所有游戏对象,则应使用状态(已经有全局性)而非为每个游戏对象设置切换开关。这将减少您的工作量,节省平台内存和运算时间。

有关集成切换开关的示例,请参阅 切换开关示例

参见
\ref soundengine_gameobj、 RTPC 和游戏对象