Wwise 有很多功能;不过在开发初期,如果不是很清楚如何使用,其可能无法按照预期运行。我不想各位因为最初的小插曲而觉得 Wwise 太难用,所以请允许我在此详细地讲解一下。只要按照这里描述的步骤操作,就不会出错。
在这篇博文中,我将介绍如何通过 Unreal Engine 来播放声音。
为了验证所述操作是否可行,我使用了以下软件版本:
- Wwise 2023.1.1.8417
- Unreal Engine 5.3.2
注意,如果使用其他版本,行为可能有所不同。
目录
创建工程
创建 Unreal 工程
集成 Unreal Integration
Wwise 初始设置
Unreal 初始设置
在 Wwise 工程中注册声音
创建 UAsset
通过 Blueprint 播放声音
最后总结
附录 – 示例文件夹配置
将所有内容放在 Unreal 工程内
将 Wwise 工程放在 Unreal 工程外
附录 – 如何创建 UAsset
附录 – 快速播放声音
利用 AkAmbientSound 播放声音
利用 Blueprint 播放声音
利用 C++ 播放声音
创建工程
创建 Unreal 工程
1. 打开 Unreal Engine 并依次选择 GAMES > Third Person。
2. 在 Project Name 字段中指定工程名称。
• 在本例中,我将工程命名为了 ThirdPerson_Tutorial。
3. 单击 Create 按钮创建新的工程。
4. 在创建工程后,会打开 Unreal Editor 视图。不过在这里,我们先来将其关闭。
集成 Unreal Integration
1. 打开 Audiokinetic Launcher,然后选中 Unreal Engine 选项卡。
2. 点击与刚才创建的 ThirdPerson_Tutorial 工程对应的 Integrate Wwise in Project... 按钮。
3. 确认所要集成的平台。
4. 若不指定 Wwise 工程路径,将在 Unreal 工程下自动创建 Wwise 工程。
• 若之前已在某个地方创建 Wwise 工程,请在此处指定路径以使用该工程。
5. 点击 Integrate 按钮。
6. 这样就完成集成了。
7. 接下来,要更新 Wwise 工程,请依次单击 Open in Wwise > Wwise 2023.1.1.8417。
Wwise 初始设置
1. 依次转到 Project > Project Settings > SoundBanks,然后选中 Enable Auto-Defined SoundBanks。
2. 保存 Wwise 工程,然后重新打开 Unreal Engine。
Unreal 初始设置
1. 依次选择 Edit > Project Settings...。
2. 依次转到 Wwise > User Settings > WAAPI,然后启用 Auto Connect to WAAPI。
3. 依次转到 Wwise > Integration Settings > Installation > Root Output Path,然后指定 Wwise 工程的 GeneratedSoundBanks 文件夹。
• 若将此字段留空,则将引用 Content 文件夹。这样会无法正确播放声音。
4. 在打开 Unreal Engine 时,Wwise 设计工具会显示 External Project Changes 警告对话框。在此,请单击 Reload 按钮。
5. Wwise Browser 中会显示警告消息,表明未找到 SoundBank 元数据。不过不用担心,直接单击 Generate SoundBanks... 按钮即可。
6. 在 Generate SoundBanks 对话框中,单击 Generate 按钮以生成 SoundBank。这时会在 Wwise Browser 中显示目录配置。
在 Wwise 工程中注册声音
接下来,我们试着播放环境声。
在此,我们选用 IntegrationDemo 文件夹中的声音:
•<Wwise>\SDK\samples\IntegrationDemo\WwiseProject\Originals\SFX
1. 将 waves.wav 文件从此文件夹拖放到 Actor-Mixer Hierarchy 下的 Default Work Unit。这时会打开 Audio File Importer 对话框。
2. 单击 Import 按钮。这时会将其注册为名为 waves 的 Sound SFX。
3. 在 Project Explorer 中,选中刚才注册的 "waves" Sound SFX 以在右侧显示该对象的相关信息。
4. 在 General Settings 选项卡中,有个 Loop 设置。请选中与之对应的复选框。
5. 右键单击 "waves" Sound SFX,并通过菜单创建以下 Event:
•Play_waves:播放 "waves" Sound SFX
•Stop_waves:停止播放 "waves" Sound SFX
6. 在完成以上步骤后,保存 Wwise 工程并重新打开 Unreal Engine。
创建 UAsset
要播放声音,需创建 Unreal Engine 素材 (UAsset)。
有多种方式可以创建 UAsset。在此,我来展示一下如何使用 Reconcile 来做到这一点。
1. 首先,创建 SoundBank 来将之前添加的 Event 包含在内。
2. 然后,在 Wwise Browser 中单击 Reconcile 按钮。
3. 接着,确认将 UAsset Operation 设为 Create,然后单击 Reconcile Unreal Assets 按钮。
4. 这时便会创建 UAsset。在 Wwise Browser 中,选中 Wwise UAssets Status 列。
通过 Blueprint 播放声音
在本文中,我将向各位展示如何通过 Blueprint 来播放声音。
1. 在菜单中选择 Open Level Blueprint。
2. 右键单击 Blueprint 视图来创建 BeginPlay Event。
3. 从 BeginPlay Event 拖动连线来创建 PostEvent 节点。
4. 在 Ak Event 中,设置 Play_waves。
5. 编译。
6. 不做任何其他更改,直接单击 Play 按钮。
7. 现在应当可以听到波形的声音了!
最后总结
为了确保相关操作切实可行,我按照本文中的步骤亲自做了验证。不过,有些步骤或截图可能会随着未来版本的升级而改变,所以如果各位发现跟我在这里的描述不同的行为,请在评论区告诉我。
若想了解其他功能,也请在评论区留言。
附录 – 示例文件夹配置
将所有内容放在 Unreal 工程内
您可以包含 Wwise 工程中的 Generated SoundBanks 文件夹,并将整个 Wwise 工程放在 Unreal 工程内。
• 优点:所有内容都在同一文件夹/存储库中。
• 缺点:非声音设计师也要下载 Wwise 工程(尽管其并不需要 Wwise 设计工具)。
将 Wwise 工程放在 Unreal 工程外
您可以将 Generated SoundBanks 文件夹放在 Unreal 工程内,而将 Wwise 工程放在 Unreal 工程外。
• 优点:非声音设计师无需下载 Wwise 工程。
• 缺点:内容会被放到多个文件夹/存储库中。
*提示:为了能在 Unreal Editor 上运行,至少要配置 Generated SoundBanks 和 Windows 文件夹下的文件。
附录 – 如何创建 UAsset
A) 在 Wwise Browser 中,将 Event 拖放到 Content Browser。
B) 右键单击 Event 并从菜单中 Import Selected Assets。
• 您可以指定多个 Event 或文件夹。
C) 另外还可通过将 Event 从 Wwise Browser 拖放到 Actor 属性或目标 Blueprint 组件来创建 UAsset。
D) 仅对于 Event 可通过从 Wwise Browser 拖放到视口来同时生成 UAsset 和 AkComponent。
在执行步骤 C 或D 时,会在 Edit > Project Setting > Wwise > Integration Settings > Asset Creation > Default Asset Creation Path 中的给定位置生成 UAsset。
附录 – 快速播放声音
利用 AkAmbientSound 播放声音
1. 放置 "AkAmbientSound" Actor。
2. 设置要在 AkEvent 上播放的 Event。
3. 启用 Auto Post。
4. 转到 Obstruction Occlusion 并将 Refresh Interval 设为 0.0。
利用 Blueprint 播放声音
1. 选择 Open Level Blueprint。
2. 创建 BeginPlay Event。
3. 从 BeginPlay 创建 Post Event 节点。
4. 设置要在 Post Event 的 AkEvent 上播放的 Event。
利用 C++ 播放声音
您可以采用 AkAudioEvent.h 中定义的 UAkAudioEvent 方法来发送 Event。
1. 您可以将 Event 发送到给定的 Actor/Component/GameObject。
- AkPlayingID UakAudioEvent::PostOnActor()
- AkPlayingID UakAudioEvent::PostOnActorAndWait()
- AkPlayingID UakAudioEvent::PostOnComponent()
- AkPlayingID UakAudioEvent::PostOnComponentAndWait()
- AkPlayingID UakAudioEvent::PostOnGameObject()
- AkPlayingID UakAudioEvent::PostOnGameObjectAndWait()
- AkPlayingID UakAudioEvent::PostOnGameObjectID()
2. 您可以使用空的 GameObject。
- AkPlayingID UakAudioEvent::PostAtLocation ()
- AkPlayingID UakAudioEvent::PostAmbient()
3. APIs that manage data loading:
- void UakAudioEvent::LoadData()
- void UakAudioEvent::UnloadData()
- bool UakAudioEvent::IsDataFullyLoaded()
- bool UakAudioEvent::IsLoaded()
评论