【虚幻UE5教程】进阶篇——关卡流送(Level Streaming)

UE


往期目录




前言

关卡流送(Level Streaming) 功能可以分块式地加载、显示关卡。将需要的关卡部分加载到内存中并渲染,不需要的关卡部分卸载。这样一来,场景就拆分为较小的地图块,并且只有相关部分才会占用资源并被渲染。

可以使用官方内容示例中 关卡流送(Level_Streaming) 关卡进行学习。
关卡示例


一、关卡

你总是拥有一个 持久关卡(Persistent Level) ,并且可以有一个或多个 子关卡/流送关卡(Stream Level)
关卡

1.1 持久关卡(Persistent Level)

持久关卡 是永久拥有的关卡。你可以把它看作一个主关卡,用来管理加载或卸载其他子关卡。

1.2 流送关卡(Stream Level)

流送关卡子关卡 将游戏整体中的内容拆分为多个,以供多个工作者同时修改或游戏场景动态加载。子关卡可以是 固定加载(Always Loaded) ,也可以通过 关卡流送体积蓝图C++代码 动态加载、卸载或流送。

二、关卡(Levels)面板

使用 关卡(Levels) 面板对关卡进行管理。在主菜单栏的 窗口(Window) 菜单中,点击 关卡(Levels) 打开面板。
关卡面板

2.1 层级面板(Level Hierarchy)

层级面板以列层级展示所有的关卡。
所有关卡

  • 当前关卡 用粗体蓝色文本表示,双击其他关卡可以将其切换为当前关卡。

  • 点击 眼睛 标志切换该关卡可视性。

  • 点击 灯泡 标志切换该关卡关照情景。

  • 点击 锁🔒 标志切换该关卡锁定情况。

  • 点击 蓝图 标志打开该关卡的关卡蓝图。

  • 点击 颜色框 更改关卡颜色。在关卡视口中 视口模式(View Mode) 菜单中,选择 Actor着色(Actor Coloration) > 关卡颜色(Level Color) 即可使关卡中Actor显示相应关卡颜色。
    请添加图片描述

2.2 关卡下拉菜单

点击面板左上角打开 关卡下拉菜单
菜单

  • 默认流送方法(Default Streaming Method) 可以设置关卡默认流送方法。

  • 创建关卡(Creat New) 将创建新的子关卡。

  • 添加关卡(Add Existing) 将弹出窗口,选择想要添加的关卡资产即可添加为子关卡。

  • 用选定Actor创建关卡(Create New with Selected Actors) 将目前选中的所有Actor从其原本关卡中拆分,放入新建关卡中。

  • 合并关卡(Merge) 将选定关卡合并到新关卡中,原关卡将删除。

2.3 细节面板(Level Details)

点击细节图标打开细节面板。
细节面板

  • 流送体积(Streaming Volumes) 内指定关卡流送体积,一个关卡可以指定多个流送体积,一个流送体积可以作用于多个关卡。

  • 初始加载与可视性(Initially …) 可以设置关卡是否初始就加载/可见。

  • 卸载请求间隔(Min Time Between Volume Unload Requests):卸载请求间隔规定了两次卸载请求之间的最少时间间隔。防止玩家在关卡边缘频繁进出,导致关卡频繁加载、卸载。

2.4 上下文菜单

右键某关卡打开 上下文菜单
右键菜单

  • 删除关卡(Remove Selected):删除选中的子关卡。

  • 改变流送方式(Change Streaming Method) 更改此设置。

    • 固定加载(Always Loaded):关卡将与持久关卡一同加载,和持久关卡同时变为可见状态。无视指定的流送体积域、蓝图或 C++ 的所有加载/卸载请求。次关卡分段不会流出,除非游戏变更持久关卡。这类关卡分段常用于将持久关卡中的常见内容拆分为多个"层",以便美术师同时协作工作而不会相互阻碍。

    • 蓝图(Blueprint):关卡通过 关卡流送体积(Level Streaming Volumes)蓝图C++代码 来动态加载、卸载或流送。

  • 选择Actor(Select Actors):选中关卡中包含的Actor。

  • 将选择移到关卡(Move Selected … to Level):将选中的Actor或植被(Foliage)移动到该关卡中。如果对象已包含在其他关卡中,将会从其他关卡中移除。

  • 选中流送体积(Select Streaming Volumes):选中该关卡指定的关卡流送体积。

2.5 面板设置

点击面板右上角 设置 菜单。
设置

  • 显示路径(Display Paths):将关卡名显示为关卡路径。
    显示路径

  • 显示Actor数(Display Actors Count):在关卡名后显示包含的Actor数。
    显示Actor数

三、关卡流送

3.1 流送体积(Streaming Volumes)

通过 关卡流送体积域 可轻松控制关卡流送。玩家视点处于体积中时,关卡加载;玩家视点处于体积外时,关卡卸载。如果一个关卡具有任何与之关联的流送体积,则该关卡的其他流送方法将无法正确工作。
基于体积域的关卡流送易于使用、易于修改。调整体积域的大小即可调整关卡加载/卸载行为。所有关卡流送体积都必须存在于 持久关卡

  • 通过 体积(Volumes) > 关卡流送体积(Level Streaming Volume) ,即可向关卡中添加流送体积。
    添加流送体积

  • 关卡面板关卡细节面板 中绑定流送体积。

  • 在细节面板中调整关卡流送体积处理关卡流送的方式。
    细节面板

    • 编辑器关卡视口中以框体显示流送体积,在细节面板中修改 缩放(Scale) 属性以更改体积大小。
      流送体积

    • 流送关卡(Streaming Levels) 显示受体积影响的关卡。

    • 仅限编辑器预可视化(Editor Pre Vis Only) 确定流送体积是否仅用于编辑器流送关卡预可视化。如果仅在编辑器中使用该流送体积,在游戏中使用其他流送方式,可以打开此设置。

    • 已禁用(Disabled):如果为真,则忽略流送体积。也用于禁用关卡流送体积而不将其与关卡分离,或者用于在蓝图和流送体积之间切换关卡流送的控制。

    • 流送使用(Streaming Usage) 确定体积的用途,例如控制加载、控制加载和可视性、控制可视性且在加载时阻塞主线程。

3.2 蓝图

关卡流送的关键函数为 加载流送关卡(Load Stream Level)卸载流送关卡(Unload Stream Level)
加载卸载

  • 使用关卡名称或资产引用指定需要加载/卸载的关卡。

  • 加载后可视(Make Visible After Load):设置是否加载后立即可视。

  • 阻塞(Should Block on …):在加载/卸载时暂时阻塞主线程,直到加载/卸载完成。

此外,获取流送关卡(Get Streaming Level) 函数可实现更为动态的流送行为。利用它访问实际的关卡流送对象后,即可修改和查询其状态。结合 创建实例(Create Instance) 函数,可以创建关卡分段的副本。 对这些副本应用变换和发送参数,即可生成程序化的世界场景,例如多种房间随机排布的地下城rogue地图。
获取关卡


总结

在这一节,我们学习关卡流送的基本逻辑与使用方法。使用关卡流送可以优化游戏性能、制作程序化生成地图,让游戏变得更加优秀。UE学习,与君共勉

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐