Wwise SDK 2019.2.15
|
Swtich(切换开关)是在游戏动作或环境变化时提供全新声音的变换。切换开关系统有一个目的:以游戏对象为基础驱动 Switch Container(切换容器)。
例如,如果地面纹理设为切换开关,则由地面纹理来决定当脚踏上去时将播放的声音:
Switch Group(切换开关组)可以是:
此组的切换开关可以是:
如果两个不同的角色在某时刻处于两种不同的地面纹理上,则各角色的切换开关状态会不一样。
如果切换开关组没有当前切换开关,切换开关组会使用默认的切换开关。这种情况可能发生在游戏开始或开发期间。如果游戏代码引用一个不存在的切换开关,则切换容器将使用默认切换开关。比如,倘若声音设计师为了更改容器而移除了某个 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。
有两种方式可使用 SDK 来设置切换开关:使用字符串(unicode 或 ansi)或使用 ID。
使用字符串可以提高代码的可读性,适合在开发期间或者通常使用字符串的环境中使用。使用 ID 可避免查询字符串,并可节省用于存储字符串的内存。
使用 SDK 设置切换开关无非就是调用函数:
或者
SetSwitch() 函数的第三个参数是应用切换开关的目标游戏对象。当使用此游戏对象触发包含播放动作的事件时,它将使用指定的切换开关选择切换容器中要播放的内容。 如果未对游戏对象设置切换开关,游戏对象则将使用切换容器选项中指定的默认切换开关。
注意,当游戏对象被注销时,它当前的切换开关也会被删除。如果稍后再使用该游戏对象,则必须重置此切换开关。
有关更多信息,请参阅 集成详情——游戏对象 。
要使用 ID,必须在选中 Wwise 中 Generate SoundBanks 对话框上的“Generate header file”选项的情况下生成 SoundBank。名为 Wwise_IDs.h 的定义文件中包含所有必要的 ID。每次生成 SoundBank 时都会更新此文件。
State Group(状态组)和 Swtich Group(切换开关组)之间的主要区别是游戏中的每个游戏对象使用不同的切换开关。状态与切换开关的另一个区别是当切换开关变换时,只会影响切换容器。当状态变换时,它可能影响切换容器,但也可能更改各种其它对象(声音、角色混音器、总线等)的参数。
技巧: 如果要在游戏中做全局的切换,并应用于所有游戏对象,则应使用状态(已经有全局性)而非为每个游戏对象设置切换开关。这将减少您的工作量,节省平台内存和运算时间。 |
有关集成切换开关的示例,请参阅 切换开关示例 。