menu
 
版本
2021.1.14.8108

2024.1.4.8780

2023.1.12.8706

2022.1.18.8567

2021.1.14.8108

2019.2.15.7667

2019.1.11.7296

2018.1.11.6987

2017.2.10.6745

2017.1.9.6501

2016.2.6.6153

2015.1.9.5624


menu_open
Wwise Unreal Integration Documentation
Spatial Audio Blueprint 组件

目前为止,所有东西都是通过使用预构建 Actor 或向各个 Actor 实例添加组件在关卡中直接构建的。其实,我们也可以使用各种 Spatial Audio 组件来构建 Blueprint Actor,然后在整个关卡中根据需要进行复制。在本节中,我们将使用 Blueprint 类来构建 Unreal 工程准备工作 章节所述结构的副本,以便在游戏世界中轻松添加或生成 Actor。

info 注記: 在开始学习本教程前,请务必先完成 Spatial Audio 教程准备工作

设置 Blueprint 类

AkLateReverbComponentAkRoomComponent 需要借助几何包含关系检测来确认给定游戏对象位置是否在父级 PrimitiveComponent 之内。该测试使用 Simple Collision。因此,您需要使用包含 Simple Collision 的父级 PrimitiveComponent 。比如,您可以使用 Box Collision、Sphere Collision 或 Capsule Collision 组件。若 PrimitiveComponent 不含任何 Simple Collision,则几何包含关系检测将直接使用组件边界。这样可能会不太精确。

除此之外,也可将 Simple Collision 添加到 Unreal 中的 Mesh 素材(参见 Setting Up Collision With Static Meshes)。对于较为复杂的 Mesh(比如带有门廊和开口的 Mesh),有时需要在 Mesh 的 Collision 设置中选择 Use Complex Collision As Simple(参见简单碰撞与复杂碰撞)。比如,若想允许角色通过门廊进入 Room,同时还要与墙壁发生碰撞,便可能需要使用此设置。在使用此设置时,AkLateReverbComponentAkRoomComponent 的几何包含关系检测会失败。因为这时会忽略 Simple Collision,转而使用 Mesh 的整个 Trimesh。AkLateReverbComponentAkRoomComponent 所用的 Simple Collision 检测并不支持 Trimesh。为此,在使用 AkLateReverbComponentAkRoomComponent 时,建议在 Blueprint 类中配置为将 Simple Collision 组件用作父对象。比如,Simple Collision 组件可以是 Box、Sphere 或 Capsule。若为 Room 或建筑特意设有 Mesh,则可将 Simple Collision 组件作为子组件添加到 Mesh。

  1. 在 Content Browser 中,右键单击并选择 Blueprint Class
  2. 选择将 Actor 作为基类,并将新类命名为 SpatialAudioBP。
  3. 双击 SpatialAudioBP 来打开类,然后单击 Viewport 选项卡。
  4. 确保选中根组件,然后依次单击 Add Component > Static Mesh
  5. 单击刚添加的 Static Mesh 组件,然后在 Details 面板中选择 Mesh。

    • 在本例中,选择 Unreal 工程准备工作 章节中所用的 SpatialAudioDemoMesh。
    • 若使用 SpatialAudioDemoMesh,则需在 Materials 分区中选择 SpatialAudioDemoMeshMaterial
    设置 Static Mesh 组件的 Mesh 和 Material
    info 注記: 只有 Convex Mesh 支持将 Room 自动指派给 Portal。Concave Mesh(如 L 形 Room)无法准确生成 Portal - Room 交点。
  6. 为 Mesh 中的每个 Room 和门廊添加 Box Collision 组件。

    • 在本教程中,Box Collision 组件包括 BoxRoomLarge、BoxRoomSmall、BoxPortalInner 和 BoxPortalOuter。
    为 Mesh 中的 Room 和 Portal 添加 Box Collision 组件

重新定位 Box Collision 组件

此时,所有 Box Collision 组件均被放在了同一位置(相互层叠)。下面我们来重新定位、缩放并旋转这些组件以使其与 Room 和门廊对齐。最简单的方法就是使用 Orthographic 视图(以下步骤是针对 SpatialAudioDemoMesh 的,不过其他 Mesh 所执行的步骤与之类似)。

info 注記: 在本教程中将 Room 和 Portal 与 Mesh 对齐时,不必担心其是否完全对齐或居于正中。只需确保大致覆盖相应区域即可。在设计实际环境时,可使用 Details 面板的 Transform 分区来输入确切数值。
  1. 在 Viewport 选项卡中,单击 Perspective 并将视图改为 Top

    • 现在看到的是使用线框渲染的俯视图。
    Orthographic Top 视图
  2. 选中 BoxRoomLarge 并沿 Y 轴下移,直到 Mesh 内 Large Room 的中间。
  3. 沿 X 和 Y 轴缩放 BoxRoomLarge,直到其大小与 Large Room 的尺寸一致(您可以通过按下 R 或在 Viewport 选项卡中选择 Scale 小组件来切换到缩放界面)。

    沿 X 和 Y 轴定位并缩放 Large Room
  4. 选中 BoxRoomSmall 并沿 X 和 Y 轴缩放,直到其大小与 Small Room 的尺寸一致。

    沿 X 和 Y 轴定位并缩放 Small Room
  5. 选中 BoxPortalInner 并沿线框放大,直至在 Mesh 上看到内侧门廊的边界。

    在 Wireframe Mesh 上定位门廊的边界
  6. BoxPortalInner 移到门廊的中间,然后沿 X 轴缩放,直到其覆盖门廊的边界。

    定位并缩放 Inner Portal Box 以使其覆盖门廊
  7. 选中并旋转 BoxPortalOuter,以使其局部 Y 维度指向门廊外面。

    info 注記: 这样做很有必要。因为 Portal 有 Front Room 和 Back Room,而其通过检测 Portal 的 Y 维度上的最近相交 Room 来自动指派。对于 BoxPortalOuter,局部坐标空间的后部将与 Mesh 中的 Small Room 连通,而前部不与任何 Room 连通。
  8. 围绕 Z 轴将 BoxPortalOuter 旋转 90 度。为此,可转到 Details 面板的 Transform 分区,并在 Z 轴 Rotation 文本框中键入 90。

    旋转 Outer Portal Box 以使其局部 Y 轴指向房门外面
  9. 往外侧门廊方向移动 BoxPortalOuter,并通过缩放来使其覆盖房门的边界。
  10. 在 Top 视图下,确保所有 Room 和 Portal 与 Mesh 对齐(如下所示)。

    在 Top 视图下正确对齐 Room 和 Portal
  11. 现在需要沿 Z 轴重新定位并缩放 Box Collision 组件。在 Viewport 选项卡中,单击 Top 并将视图改为 Back
  12. 选中 BoxRoomLargeBoxRoomSmall,然后沿 Z 轴缩放以使其与 Room 的尺寸一致。

    沿 Z 轴缩放两个 Room Box
  13. 选中 BoxPortalOuterBoxPortalInner 并将其向下移到门廊中央,然后沿 Z 轴进行缩放以使其与房门的尺寸一致。

    沿 Z 轴定位和缩放 Portal Box

设置 Room 和 Portal

下面我们来将 AkRoom 组件添加到 Room,并将 AkPortal 组件添加到 Portal。

  1. 逐一选择各个 Box Collision 组件,然后选择 Add Component
  2. 针对每个 Box Collision 组件创建 Room 或 Portal 组件(视情况而定),并为其设置与父对象相似的名称。结果应如下图所示:

    将 AkRoom 组件添加到 Room Box,并将 AkPortal 组件添加到 Portal Box
    info

    注記: 确保将组件添加到正确的父对象。比如,在将 AkRoomLarge 添加到 Large Room 时,确保在单击 Add Component 前选中 BoxRoomLarge

    AkRoomComponent 和 AkPortalComponent 为通用组件,可添加到任何 Primitive 组件。有关详细信息,请参阅 AkRoomComponentAkPortalComponent 章节。

  3. 若要确认 Portal 的放置是否有效,请在 Integration Settings 中选中 Visualize Rooms and Portals 选项。

    在 Integration Settings 中选中 Visualize Rooms and Portals 选项
  4. 现在在连通的 Room 和 Portal 之间绘制了框线。若 Portal 的放置无效,则将其显示为红色。

    在 Viewport 中显示 Room 和 Portal 的连通状况
    info 注記: 若 Portal 不与任何 Room 连通或同一 Room 与两端连通,则将 Portal 的放置视为无效。有关详细信息,请参阅 AkPortalComponent 章节。
  5. 在 Integration Settings 中取消选中 Visualize Rooms and Portals 选项。

添加 Geometry 和 Late Reverb

最后还要将 AkGeometry 和 AkLateReverb 组件添加到 Blueprint 类。

  1. 将 AkGeometry 组件添加到 Static Mesh 组件。
  2. 将 AkLateReverb 组件添加到 "BoxRoomLarge" Box Collision 组件。

    将 AkGeometry 和 AkLateReverb 添加到 Blueprint 类
  3. 单击 AkLateReverb 组件。
  4. 在 Details 面板中,将 Aux Bus 设为 LargeRoom

验证所作设置

Blueprint 类现在可供使用了。我们可以将类的实例拖到游戏世界中。

  1. SpatialAudioBP 的实例从 Content Browser 拖到 Spatial Audio Demo 地图中。
  2. 将其放在现有建筑旁边。

    将 Blueprint 类的实例添加到游戏世界中
  3. 远程连接到 Wwise,并进入 Play In Editor 模式。
  4. 单击鼠标来播放 Outside 声音。
  5. 在 Wwise 的 Game Object Profiler 布局中,确认已正确注册新 Blueprint 类的几何构造,并可从该几何构造正常反射射线。
  6. 确认在新的 Blueprint 结构中射线正确穿过 Portal。

    Spatial Audio 路径与 Blueprint 类实例正确交互
  7. 若要测试 Late Reverb 组件,则须添加声音并将其定位在 SpatialAudioBP 实例中的 Large Room 内。右键单击并复制游戏世界中的现有 Play_Outside AkAmbientSound Actor。

    复制现有 Play_Outside 声音
  8. 将复制项重命名为 Play_LargeRoom_BP(您也可以在 World Outliner 中将 Play_LargeRoom_BP 拖到 Button_Outside 之上,来将 Play_LargeRoom_BP 与 Button_Outside 解绑)。
  9. Play_LargeRoom_BP 移到 SpatilAudioBP 实例的 Large Room 内。

    将声音定位在 Large Room 内
  10. 打开 Level Blueprint 并添加相应的逻辑,以在按下 B 键时播放 Play_LargeRoom_BP 声音(参见 Unreal 工程准备工作 章节的步骤 3)。

    在 Level Blueprint 中添加逻辑以使用 B 键来播放新的声音
  11. 编译并保存 Level Blueprint。
  12. 进入 Play In Editor 模式。
  13. 按下 B 来播放新的声音。
  14. 走进 SpatialAudioBP 建筑中的 Large Room。
    • 这时应能听到所应用的混响效果。

此页面对您是否有帮助?

需要技术支持?

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

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

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

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

开始 Wwise 之旅