版本

menu_open

集成 Wwise Motion

通过 Wwise,您可以使用您用于管理游戏音频的相同功能集来管理 Motion(振动)。这意味着现在您可以使用相同的 API 对振动数据执行与音频数据相同的操作。目前,振动引擎中只支持主机游戏控制器。

Note.gif

Note: 振动功能目前不可用于 Mac®、iOS、tvOS 和 Android 平台。

注册在游戏中使用的设备

在默认情况下,声音引擎不提供振动设备。游戏必须链接到各个设备的独立库。见下表:

Device Library ID Callback
Game Controller AkRumble.lib AKMOTIONDEVICEID_RUMBLE AkCreateRumblePlugin
Windows
Device Library ID Callback
Game Controller AkRumble.lib
Xinput.lib
dinput8.lib
AKMOTIONDEVICEID_RUMBLE AkCreateRumblePlugin

玩家初始化

振动引擎支持多个玩家,也支持一个玩家使用多个设备。例如,一款带分屏的 Xbox One 游戏在同一个游戏机上可有最多 4 个玩家。游戏必须注册各个玩家,以使他们能够通过各个设备获得反馈。这是通过 AK::MotionEngine::AddPlayerMotionDevice 来实现的。

必须对当前连接的各个玩家和设备重复执行此操作。如果计算机上没有安装设备驱动程序,则此操作将返回错误。此操作不会检查设备是否真正通电。对于 Rumble,检查是否连接控制器应由游戏在输入设备初始化时来完成。

在游戏机上,游戏控制器既可因为硬件问题而断开,也可因为通讯问题而断开。除了浪费一些资源外,它不会对振动引擎产生任何不利影响。如果您认为设备断开了很长一段时间,您可以调用 AK::MotionEngine::RemovePlayerMotionDevice 来释放资源。

如果玩家断开他的控制器,并将它重新连接到游戏机的另一个端口,您必须先调用 RemovePlayerMotionDevice,然后使用新的玩家端口调用 AddPlayerMotionDevice。

玩家管理

由于多人游戏中的各个玩家不会同时做同一件事,因此收到的反馈也应该是不相同的。为了控制哪个玩家收到哪种振动效果,再次使用了在音频中用到的一些概念: Listener 和游戏对象。对于振动,游戏对象“发出”振动, Listener “接收”它们。

在支持振动的游戏中,各个玩家必须有其自己的 Listener (请参阅 集成 Listener )。游戏必须显式向玩家分配 Listener 。这是由 AK::MotionEngine::SetPlayerListener 来实现的。

注意,在默认情况下,所有玩家使用 Listener 0。这些 Listener 已经被修改为充当音频和振动数据的接收器。然而,在默认情况下 Listener 只能启用于接收音频。为了指定 Listener 将接收到数据类型,应调用 AK::SoundEngine::SetListenerPipeline

在设置此后,游戏只需根据情况在各个游戏对象上激活正确的 Listener 位(bit)。操作方法与音频相同,使用的也是 AK::SoundEngine::SetActiveListeners。

然而,它与音频之间巨在一个重大的差别。在音频中,只有声音使用 3D 定位设置时, Listener 才是必要的。而振动则不是这样。对于 Motion,要在振动设备中感觉到任何反馈, Listener 和游戏对象设置是必需的。

使用振动源插件

Wwise 目前在出厂时提供以下振动源插件:

名称 ID (AKSOURCEID_...) 回调 设备
振动发生器 AkMotionGenerator _MOTIONGENERATOR AkCreateMotionGenerator 游戏控制器

要使用振动源插件,您只需使用 AK::SoundEngine::RegisterSource 像注册任何其他源插件一样注册它。

编写振动源插件

为振动设备编写源插件与编写音频插件非常类似。请参阅音频插件一节了解详情(音频插件 )。

音频插件和振动源插件之间存在两大差异。第一个差异是插件必须支持接口 AK::Wwise::IMotionSourcePlugin。它源自 AK::Wwise::IAudioPlugin,因此与音频插件相关的所有服务和限制均适用(请参阅 编写音频插件的 Wwise 设计工具部件 )。第二个差异是定义插件属性所需要的 XML 文件。虽然文件的大多数内容与普通音频源所需的内容相同(请参见 Wwise 插件 XML 描述文件 ),但是振动插件必须按照以下声明:

<FeedbackSourcePlugin Name="Wwise Motion Generator" CompanyID="0" PluginID="405" DataType="TypeSpeedSamples">
  • Name 是指在 Wwise 应用程序的“Add Source”菜单下见到的名称。
  • CompanyID 是指公司 ID。0 预留给 Audiokinetic 使用。
  • PluginID 是指插件 ID。在此您可以使用任何内容。
  • DataType 必须是以下之一:TypePositionSamples、TypeSpeedSamples、TypeAccelSamples。它指定插件输出的采样类型,并确保不兼容的设备不会接收它不支持的数据。Rumble pad 支持速度采样。

核对清单与故障排除

因此,为了使特定玩家能够接收到一个设备的振动,您必须:

在 Wwise 工程中:

  • 必须在 Project Settings / Motion Devices 选项卡中选择设备
  • 必须有一个源连通到主振动总线
  • 该源必须位于已加载的 SoundBank 中。

如果 Wwise 中创建的振动未在特定振动设备上播放,您则可以使用 Profiler 来排查问题。在 Advanced Profiler 中捕获振动数据的方法如下:

  • 按 F6 切换到 Profiler 布局。
  • 在菜单栏中,单击 Project > Profiler Settings。
  • 选择 Motion Data 选项,并单击 OK。Motion Devices 选项卡于是添加到 Advanced Profiler 中了。

现在您可以连接到游戏,对振动性能进行分析,以找出潜在问题。“Motion Devices”选项卡包含两个独立的列表:一个用于 Devices(设备),另一个用于 Game Object(游戏对象)。Devices 列表指示对各个玩家而言哪些振动设备已经在声音引擎中正确注册并进行了初始化。

为了排查问题,首先应查看振动设备是否已经正确初始化了,方法如下:

  • 检查各个振动设备是否都已显示在设备列表中了。

如果振动设备出现在列表中,则查看振动设备是否已与特定玩家相关联,方法是检查有没有一个复选标记将设备与相应玩家匹配起来。如果没有复选标记,则可能存在以下其中一种情况:

如果振动设备已经正确初始化,并且关联到了正确的玩家,那么您可以检查 Game Object 列表,验证游戏对象是否设置正确,能够将振动数据发送到具体玩家。如果特定的游戏对象/玩家组合上没有复选标记,那么您可以切换到 Advanced Profiler 的 Listeners 选项卡查看以下情况:

  • 在 Listener 列表中,在 Players 列中找到未收到振动数据的玩家编号,然后查看玩家正在使用哪个 Listener 接收振动数据。如果玩家没有使用正确的 Listener ,则应检查您是否调用了 AK::MotionEngine::SetPlayerListener
  • 如果玩家使用的是正确的 Listener ,则应确保在 Motion 列中选择了玩家所关联的 Listener。 否则,检查您是否正确调用了 AK::SoundEngine::SetListenerPipeline
  • 如果显示有复选标记,则应检查 Game Object 列表,检查是否已针对播放 Motion FX(振动效果)的游戏对象启用了玩家使用的 Listener 。如果未针对游戏对象启用 Listener ,则应检查您是否调用了 AK::SoundEngine::SetActiveListeners。

此页面对您是否有帮助?

需要技术支持?

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

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

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

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

开始 Wwise 之旅