关卡流送体积域

Level Streaming Volumes(关卡动态载入体积) 用于辅助 关卡动态载入 处理。 它们提供了一种简单的封装关卡的方式,可以根据玩家进出该体积的时机,控制关卡载入及载出内存的时机。

现在,您可以在 详细信息 面板中调整关卡动态载入体积如何处理关卡动态载入。

levelstreamingvolume.png

属性 描述
Streaming Levels (动态载入关卡) 显示受到该体积影响的关卡。
Editor Pre Vis Only 决定此动态载入体积是否仅用于编辑器动态载入关卡优先。
Disabled(禁用) 如果该项为 true ,那么动态载入体积代码会忽略该动态载入体积。

也用于启用该体积,而不必将该体积从关卡中分离;或者用于在蓝图和体积动态载入之间切换关卡动态载入的控制。
Streaming Usage(动态载入应用) 决定此体积的用途,例如,是否控制载入,是否控制载入及可视度,或仅仅是可视度(在载入时遮挡)

将流送体积域和关卡关联

以体积域为基础的关卡流送工作原理为:每个流送关卡可与一套关卡流送体积域相关联。引擎将每帧在关卡上进行迭代,并检查玩家视点是否处于与关卡关联的关卡流送体积域中。如视点处在至少一个关卡流送体积域中,则会发送请求开始加载该关卡。如视点处在所有关卡流送体积域之外,关卡将被标记供卸载。

重要细节

  • 所有关卡流送体积域必须存在于固定关卡中。存在于其他关卡中的关卡流送体积域无法用于关卡流送,地图进行错误检查时将出现警告。

  • 如关卡拥有与其相关的流送体积域,其他关卡流送方法将无法正常实施。

  • 单个关卡流送体积域可影响多个关卡。同理,单个关卡可受到多个关卡流送体积域的影响。

  • 基于体积域的流送可用于分屏。在加载/卸载请求发送前将考虑到所有本地玩家的视点。

测试流送体积域设置

在目标平台上进行基于体积域的关卡流送测试十分关键。在 Play in Editor 模式(PIE)中的流送将显示加载/卸载开始之处,但 PIE 中的流送不代表游戏中真实的加载-卸载。这是因为在 PIE 中关卡已处于内存中,关卡的“加载”只是将其立即取消隐藏而已。

在目标平台上运行 standalone 游戏的关卡十分重要,可确定流送设置是否正常工作。注意:在某些平台上流入一个关卡可能耗时数秒。设置合适的关卡流送体积域尺寸,使玩家与其产生接触时加载关卡。调整关卡关联的关卡流送体积域大小即可修改关卡加载行为。扩大体积域会导致与其关联的关卡更早加载,更迟卸载;而缩小体积域会导致更迟加载,更早卸载。

预览关卡流送体积域

在关卡流送体积域上设置 Editor Pre Vis Only 标记即可将其标记为仅限编辑器预览。在这种方式下,基于体积域的关卡流送仍能用于编辑器预览,同时用另一中方法进行游戏中的流送。

关卡流送体积域开销

UWorld::ProcessLevelStreamingVolumes 每帧都会在每个流送关卡上迭代。对每个关卡而言,本地玩家进入与关卡关联的体积域后该关卡便会开始加载。同理,如所有本地玩家皆处于全部体积域外,关卡便会开始卸载。

UWorld::ProcessLevelStreamingVolumes 用以下方式利用一致性:对每个关卡而言,与玩家最近发生交互的体积域将被缓存。该缓存体积域将首先接受检查,因此玩家所在或返回的关卡将被迅速接受。

体积域可为任意形状,但形状越少越好。关卡流送体积域开销的上限可根据未加载关卡相关的关卡体积域数量相加而粗略计算。

监控关卡流送性能的“Streaming”统计组下有两项统计值。“Streaming Volumes”统计值跟踪每帧对玩家视点进行测试的关卡流送体积域的数量,而“Volume Streaming Tick”统计值跟踪每帧在 UWorld::ProcessLevelStreamingVolumes 中消耗的时间。

为卸载请求添加滞后

玩家在关卡流送体积域边界来回移动时会发出不必要的加载/卸载请求。为卸载请求添加滞后即可解决此问题。加载请求不需要滞后,因为如果一个关卡将被加载,需要它尽快加载完成。

Levels 窗口 中修改流送关卡的 Min Time Between Volume Unload Requests 属性即可调整卸载滞后量。默认卸载滞后为 2.0 秒。

禁用关卡流送体积域

关卡流送体积域上有一个名为 bDisabled 的属性。设为 true 后,流送体积域代码将在游戏和编辑器中无视体积域。bDisabled 可禁用关卡流送体积域,无需将其和关卡解除关联。

bDisabled 标记的一个实用范例:有通向关卡的一扇门,它的流送由流送体积域控制。流送体积域延展到了门上,因此玩家到达并开门时便会开始流入关卡。然而最初此门为上锁状态,玩家在关卡的另一个部分达成目标后才会解锁。因此,即时流送体积域延展到了门上,也不需要流入门另外一侧的关卡,除非门已为解锁状态(“可打开”)。

蓝图和 C++ 两者均可开启 Level Streaming Volumes 的禁用状态。