版本

menu_open
Wwise SDK 2019.2.15
集成详情——切换开关

简介

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

示例:切换开关组

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

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

  • Ground(地面)

此组的切换开关可以是:

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

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

切换开关设置

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

驱动切换开关

有三个选项可用于驱动切换开关:SDK AK::SoundEngine::SetSwitch() 方法、在 Wwise 事件中生成的“SetSwitch”动作或 RTPC。然而,组合使用这些选项可能会出问题。比如,倘若声音设计师在其创建的 Event 中添加 SetSwitch 动作,而音频程序员使用 SDK AK::SoundEngine::SetSwitch() 命令驱动 Switch,可能会很难控制 Switch。因此,我们强烈建议声音设计师和音频程序员一起决定到底如何驱动 Switch,无论是针对单个 Switch Group 还是整个工程。如果已就变换切换开关的方式达成了一致意见,则可同时使用所有三种方式。比如,音频程序员仅使用 SDK AK::SoundEngine::SetSwitch() 命令对 Switch 进行初始化,而在游戏其他部分全部通过 Event 来驱动 Switch。

使用 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 时都会更新此文件。

对比切换 Switch 和 State

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

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

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

参见
概念:Switch, 集成详情——游戏对象, 集成详情—— State(状态), AK::SoundEngine::SetSwitch(), RTPC 和游戏对象
AKSOUNDENGINE_API AKRESULT SetSwitch(AkSwitchGroupID in_switchGroup, AkSwitchStateID in_switchState, AkGameObjectID in_gameObjectID)

此页面对您是否有帮助?

需要技术支持?

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

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

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

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

开始 Wwise 之旅