UE4-(蓝图)第二十六课关卡流送(体积域)

213 篇文章 591 订阅

前提说明:

关卡流送功能可将地图文件加载到内存中,也可从内存中卸载,并在游戏过程中切换地图的显示。这样一来场景便能拆分为较小的文件块,只有相关的部分才会占用资源并被渲染。

固定关卡

实现关卡无缝混合的第一步是创建固定关卡。它可被视为一个主关卡,主要用于管理哪些关卡将流进和流出。

流送关卡

流送关卡通过 Levels 窗口 进行管理。它可与固定关卡重叠,或偏移创建更大的世界场景。使用流送关卡的流送类型可设为 Always Loaded 或 Blueprint。右键单击关卡分段即可在Levels窗口中开启此设置。

主题:

关卡流分为两种:关卡流送体积域和蓝图控制

一、关卡流送体积域

官方文档中的重要详细信息:

1.所有关卡流送体积都必须存在于固定关卡中。存在于其他关卡内的关卡流送体积不可用于关卡流送,并将在 检查地图错误时生成警告。

2.如果一个关卡具有任何与之关联的流送体积,则该关卡的其他流送方法将无法正确工作。

3.一个关卡流送体积可以影响多个关卡。类似地,一个关卡可以受多个关卡流送体积影响。

4.基于体积的流送可用于分割屏幕。在发出任何加载/卸载请求之前,所有本地玩家的视点都将予以考虑。

基于体积的关卡流送以如下方式工作:

每个流送关卡都可以关联一组关卡流送体积(Level Streaming Volume)。每一帧中,引擎会在每一关卡上迭代, 并检查玩家的视点(摄像机)是否位于与该关卡相关的任何关卡流送体积内。如果该视点在至少一个 关卡流送体积内,则发出请求以开始加载该关卡。如果该视点在所有关卡流送体积之外,关卡将标记为卸载。

注:可以理解为 与玩家的摄像机高度有关,只有摄像机在体积域以内才能触发加载关卡,如果不在已加载的关卡就会卸载。

二、场景

1.在Content Browser窗口下的文件夹内新建关卡命名为LevelStreamingVolume,然后再顶部工具栏选择窗口/关卡,打开关卡窗口,将LevelStreamingVolume拖拽到PersistentLevel 下,在视图右下角可以看到当前选中的关卡是哪个,也可以在关卡窗口看关卡的字体颜色及大小用来区分,添加子关卡时,也可以使用关卡窗口下的关卡选项下新建或者添加进行对子关卡的操作。

2.默认的固定关卡就是新创建的关卡场景,然后选择关卡窗口中的LevlStramingVolume子关卡,增加一个可以按键控制旋转的actor,在ContentBrowser窗口的文件夹中右键创建蓝图类选择actor类型,命名为Cube_Rot.。

3.双击打开,选择蓝图类中的视口界面,将UE4编辑器中模式窗口下的 basic 下的立方体拖入到视口中,

4.选择蓝图类中的事件图表,要达到的效果:玩家进入体积域后加载子关卡物体,然后进行按键控制物体旋转及停止。

注:因为不能在固定关卡的关卡蓝图进行逻辑控制,只能在子关卡的蓝图类中控制物体的旋转及停止,但是在蓝图类actor中,单纯的按键按下是不能够被监测到的,所以,要在蓝图类中开启监测按键事件。获取到玩家控制器,开启输入事件的检测。使用Enable Input节点及get player controller

5.在蓝图类中的我的蓝图下创建bool值变量命名为IsPressed,通过G键按下,利用FlipFlop节点,控制bool值的更改,进而控制物体的旋转/停止,蓝图如下

6.完成蓝图后编译,将Cube_Rot蓝图actor,拖拽到LevelStreamingVolume子关卡中,调整位置。完成后,选择PersistentLevel(固定关卡),放置关卡体积域。(体积域要放在固定关卡中)

7.在固定关卡创建体积域:在模式窗口的体积选项中选择LevelStreamVolume拖拽到场景中,并且调整体积的大小

注:因为该体积域会自动的去检测玩家是否在体积内,进而产生子关卡的加载或者卸载。所以最好将整个子关卡的场景范围全部包裹,检测的是摄像机,如果玩家摄像机离人物模型比较远,就要考虑摄像机抬升时,是否会超过体积域,造成人物模型在体积域,摄像机不在,子关卡场景被卸载掉的问题。

8.选中刚创建的LevelStreamingVlume体积域,在细节面板下,设置体积域的以下属性:取消勾选 Editor Pre Vis Only 和 Disabled;Streaming Usage 应被设为 SVB Visibility Blocking on Load。

 

说明:Editor Pre Vis Only :将该关卡流送体积标记为编辑器预可视化。

Disabled:当其设置为真时,无论是在游戏中还是在编辑器中,流送体积代码都会忽略该体积。Disabled 可用于禁用关卡流送体积而不将其与关卡分离。

9.选择关卡窗口,选择LevelStreamingVolume子关卡后,选择调出关卡详细信息按钮,打开关卡详细信息界面。

10.在关卡详细信息面板,Streaming Volumes属性增加元素,使用吸取功能选择创建的体积域,完成后不要勾选Initially Loaded及Initially Visible

注:在最下方有个小箭头,点开后,最后一个Min Time Between Volume Unload Requests属性

Min Time Between Volume Unload Requests:卸载请求之间的最小时间。

向卸载请求添加滞后

玩家在关卡流送体积边界上来回移动会导致发出不需要的加载/卸载请求。为了解决此问题,已将滞后添加到卸载 请求。加载请求不存在滞后,因为如果需要加载某个关卡,我们总是希望该关卡能尽快加载。

卸载滞后量可以通过修改体积卸载请求之间的最小时间来调整。 默认卸载滞后为2.0秒。

三、运行

按下G键后物体旋转/停止,摄像机离开体积域后,物体消失

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UE4中,关卡流送(Level Streaming)是一种将大型游戏地图分割成多个子关卡,并在游戏运行时动态加载和卸载这些子关卡的技术。这样可以减少游戏的内存占用和加载时间,提高游戏性能。下面是一种实现关卡流送的方法: 1. 创建子关卡:将大型地图分割成多个子关卡。可以使用UE4的Level Editor工具来创建和编辑这些子关卡。 2. 设置关卡属性:在每个子关卡的属性面板中,找到Streaming Options部分。将"Level Streaming"选项设置为"Enabled",并指定子关卡的LOD(Level of Detail)。 3. 创建关卡流送卷轴:在主关卡中创建一个触发器(Trigger Volume)或者是一个特定的Actor,作为触发加载或卸载子关卡的触发器。可以使用蓝图或者代码来实现触发器的功能。 4. 实现触发器功能:在触发器的蓝图或代码中,通过调用Level Streaming函数来加载或卸载子关卡。可以使用函数如Load Stream Level和Unload Stream Level来实现。 5. 控制加载和卸载:根据游戏的需求和设计,决定何时加载和卸载子关卡。可以在玩家进入或离开触发器区时触发加载或卸载子关卡。 6. 进行测试和优化:在进行关卡流送功能的实现后,进行测试并对性能进行优化。可以根据游戏的需求和硬件平台,调整子关卡的LOD和加载方式,以获得最佳的游戏性能和体验。 以上是一种基本的关卡流送实现方法。根据具体的游戏需求,还可以进一步扩展和优化关卡流送功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值