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
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
Wwise Unreal Integration Documentation
|
目前为止,所有东西都是通过使用预构建 Actor 或向各个 Actor 实例添加组件在关卡中直接构建的。其实,我们也可以使用各种 Spatial Audio 组件来构建 Blueprint Actor,然后在整个关卡中根据需要进行复制。在本节中,我们将使用 Blueprint 类来构建 Unreal 工程准备工作 章节所述结构的副本,以便在游戏世界中轻松添加或生成 Actor。
info | 注記: 在开始学习本教程前,请务必先完成 Spatial Audio 教程准备工作 。 |
AkLateReverbComponent
和 AkRoomComponent
需要借助几何包含关系检测来确认给定游戏对象位置是否在父级 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,同时还要与墙壁发生碰撞,便可能需要使用此设置。在使用此设置时,AkLateReverbComponent
和 AkRoomComponent
的几何包含关系检测会失败。因为这时会忽略 Simple Collision,转而使用 Mesh 的整个 Trimesh。AkLateReverbComponent
和 AkRoomComponent
所用的 Simple Collision 检测并不支持 Trimesh。为此,在使用 AkLateReverbComponent
和 AkRoomComponent
时,建议在 Blueprint 类中配置为将 Simple Collision 组件用作父对象。比如,Simple Collision 组件可以是 Box、Sphere 或 Capsule。若为 Room 或建筑特意设有 Mesh,则可将 Simple Collision 组件作为子组件添加到 Mesh。
单击刚添加的 Static Mesh 组件,然后在 Details 面板中选择 Mesh。
info | 注記: 只有 Convex Mesh 支持将 Room 自动指派给 Portal。Concave Mesh(如 L 形 Room)无法准确生成 Portal - Room 交点。 |
为 Mesh 中的每个 Room 和门廊添加 Box Collision 组件。
此时,所有 Box Collision 组件均被放在了同一位置(相互层叠)。下面我们来重新定位、缩放并旋转这些组件以使其与 Room 和门廊对齐。最简单的方法就是使用 Orthographic 视图(以下步骤是针对 SpatialAudioDemoMesh 的,不过其他 Mesh 所执行的步骤与之类似)。
info | 注記: 在本教程中将 Room 和 Portal 与 Mesh 对齐时,不必担心其是否完全对齐或居于正中。只需确保大致覆盖相应区域即可。在设计实际环境时,可使用 Details 面板的 Transform 分区来输入确切数值。 |
在 Viewport 选项卡中,单击 Perspective 并将视图改为 Top。
沿 X 和 Y 轴缩放 BoxRoomLarge,直到其大小与 Large Room 的尺寸一致(您可以通过按下 R 或在 Viewport 选项卡中选择 Scale 小组件来切换到缩放界面)。
选中 BoxRoomSmall 并沿 X 和 Y 轴缩放,直到其大小与 Small Room 的尺寸一致。
选中 BoxPortalInner 并沿线框放大,直至在 Mesh 上看到内侧门廊的边界。
将 BoxPortalInner 移到门廊的中间,然后沿 X 轴缩放,直到其覆盖门廊的边界。
选中并旋转 BoxPortalOuter,以使其局部 Y 维度指向门廊外面。
info | 注記: 这样做很有必要。因为 Portal 有 Front Room 和 Back Room,而其通过检测 Portal 的 Y 维度上的最近相交 Room 来自动指派。对于 BoxPortalOuter,局部坐标空间的后部将与 Mesh 中的 Small Room 连通,而前部不与任何 Room 连通。 |
围绕 Z 轴将 BoxPortalOuter 旋转 90 度。为此,可转到 Details 面板的 Transform 分区,并在 Z 轴 Rotation 文本框中键入 90。
在 Top 视图下,确保所有 Room 和 Portal 与 Mesh 对齐(如下所示)。
选中 BoxRoomLarge 和 BoxRoomSmall,然后沿 Z 轴缩放以使其与 Room 的尺寸一致。
选中 BoxPortalOuter 和 BoxPortalInner 并将其向下移到门廊中央,然后沿 Z 轴进行缩放以使其与房门的尺寸一致。
下面我们来将 AkRoom 组件添加到 Room,并将 AkPortal 组件添加到 Portal。
针对每个 Box Collision 组件创建 Room 或 Portal 组件(视情况而定),并为其设置与父对象相似的名称。结果应如下图所示:
info |
注記: 确保将组件添加到正确的父对象。比如,在将 AkRoomLarge 添加到 Large Room 时,确保在单击 Add Component 前选中 BoxRoomLarge。 AkRoomComponent 和 AkPortalComponent 为通用组件,可添加到任何 Primitive 组件。有关详细信息,请参阅 AkRoomComponent 和 AkPortalComponent 章节。 |
若要确认 Portal 的放置是否有效,请在 Integration Settings 中选中 Visualize Rooms and Portals 选项。
现在在连通的 Room 和 Portal 之间绘制了框线。若 Portal 的放置无效,则将其显示为红色。
info | 注記: 若 Portal 不与任何 Room 连通或同一 Room 与两端连通,则将 Portal 的放置视为无效。有关详细信息,请参阅 AkPortalComponent 章节。 |
最后还要将 AkGeometry 和 AkLateReverb 组件添加到 Blueprint 类。
将 AkLateReverb 组件添加到 "BoxRoomLarge" Box Collision 组件。
Blueprint 类现在可供使用了。我们可以将类的实例拖到游戏世界中。
将其放在现有建筑旁边。
确认在新的 Blueprint 结构中射线正确穿过 Portal。
若要测试 Late Reverb 组件,则须添加声音并将其定位在 SpatialAudioBP 实例中的 Large Room 内。右键单击并复制游戏世界中的现有 Play_Outside AkAmbientSound Actor。
将 Play_LargeRoom_BP 移到 SpatilAudioBP 实例的 Large Room 内。
打开 Level Blueprint 并添加相应的逻辑,以在按下 B 键时播放 Play_LargeRoom_BP 声音(参见 Unreal 工程准备工作 章节的步骤 3)。