UE4大地图(流关卡、无缝地图)

对于UE4来说我只是个菜鸟,研究一下网上的教程稍微尝试的做一下demo,所以可能下面会有描述不准确或者说没解释清的地方请多谅解哈。也非常欢迎指出我说的不对的地方一起学习。

接下来开始教程。
UE4的原生功能LevelStreaming就非常适合用来做大地图,这也是生存竞技类游戏首选UE4来开发的原因之一。现在就稍微解释一下UE4的大地图实现。
对于UE4来说,Level(关卡)的概念很重要,但是为了更快的进入本文内容,我们可以把Level先当作这个大地图世界的切片,比如一个大地图你把它横竖切过成9宫格,每一片就是一个Level。而LevelStreaming(流关卡)就是用来把这些Level加载进来的方案。
现在我们就来做一个demo。功能就是像下图这样,这个世界有两个Level:A、B。角色从A走到B。两个level在合适的时机加载。
UE4大地图(流关卡、无缝地图)
因为我自己本身也刚学习,所以我的教程也尽量详细,尽量把每个过程都照顾到。

场景建造

首先我们创建一个第一人称项目,建造这个场景
UE4大地图(流关卡、无缝地图)
通过选择这几个cube复制粘贴,稍微摆放一下场景物件来把场景扩大,并且把中间的墙删掉
UE4大地图(流关卡、无缝地图)
如果这时候build的话会提示场景光照需要先build,并且下面会出现这个提示
UE4大地图(流关卡、无缝地图)
所以先等这个光照build完我们可以跑来看看。
UE4大地图(流关卡、无缝地图)
这时候需要把场景分成两个Level,左边是A,右边是B。
先打开Level面板(Windows->Levels)
UE4大地图(流关卡、无缝地图)
创建一个新Level,把Level放在和现在用的这个map同一路径下(必须放在同一路径,后面会讲到)
UE4大地图(流关卡、无缝地图)
同样的方法创建LevelB。

这时候需要把当前关卡设置为LevelA
UE4大地图(流关卡、无缝地图)
然后把场景种的所有左边的物件选中(一个一个点...),设置为LevelA的物件
UE4大地图(流关卡、无缝地图)
可以通过隐藏这个关卡物件的按钮来看是否迁移正确
UE4大地图(流关卡、无缝地图)
同样的方法处理LevelB

这样子处理之后,我们需要的场景就建造完成了

流关卡实现

根据我尝试的结果,最少有四种方法可以实现。

方法1:通过触发器触发你的蓝图逻辑:
首先在场景中间放置一个BoxTrigger。(先把FirstPersonExampleMap切换为当前关卡)
UE4大地图(流关卡、无缝地图)
选中BoxTrigger,之后打开关卡蓝图
UE4大地图(流关卡、无缝地图)
这时候可以直接右键生成这个触发器的触发事件
UE4大地图(流关卡、无缝地图)
然后就是调用这个流程最关键的接口
UE4大地图(流关卡、无缝地图)
完成之后如果这时候你点了Play的话,会自己掉落到空场景。所以需要先把LevelA先加载进来
UE4大地图(流关卡、无缝地图)
这时候play,从LevelA走到LevelB,你就能看到能正常加载并通过

方法2:通过代码加载
通过代码加载就是如果你有自己的加载需求,自己在你的代码逻辑中调用上面的加载和卸载接口。这里就不演示了

方法3:通过StreamingVolumes控制加载卸载
这个方法是,通过UE的控件LevelStreamingVolume,来判断是否在Level显示范围内,是则加载,否则卸载
先把刚刚的关卡蓝图的事件流程断开
在LevelB上放置一个完整包含LevelB的LevelStreamingVolume
UE4大地图(流关卡、无缝地图)
打开LevelB的LevelDetails,设置VolumeB为它的StreamingVolume。
UE4大地图(流关卡、无缝地图)

这时你就能看到,当你走过去LevelB的时候就自动加载了。当你离开就会卸载。

方法4:通过系统的场景与照相机的距离,自动加载卸载(吃鸡大世界主要方法)

这个方法会比较复杂,首先需要先把这个场景中的子Level都删掉。所以之前的demo是不能通用的。这时候我们先把刚刚的项目备份。再开始做这个。

先把子Level删掉
UE4大地图(流关卡、无缝地图)
打开WorldComposition功能。(Window->World Setting ->World -> EnableWorldComposition勾上)

UE4大地图(流关卡、无缝地图)
然后你能看到你一直用的Levels面板多了一个按钮
UE4大地图(流关卡、无缝地图)
同时你也会发现,你的LevelA和LevelB也在里面。
这就是为什么之前说必须放在和你当前Level同一个文件夹的原因。放在同一个文件夹下的Level都会加载到这里,作为默认可能打开的level
这时候在Levels面板里双击这两个level,就会把这两个Level加载进来
这时候Play的话,你会看到两个场景都自动加载进来了
这是因为,现在的加载距离非常远,你两个小Level都包含在里面
UE4大地图(流关卡、无缝地图)
所以现在我们要加一个新layer,加载距离只有20m(20m以外卸载)
UE4大地图(流关卡、无缝地图)
然后把LevelA和LevelB加载到Layer20M这(这里操作有点奇怪,有时候不显示AssignToLayer这个按钮,这个的话Unload再Load一下,瞎折腾一下就好了。。。)
UE4大地图(流关卡、无缝地图)
这时候你在场景里走一下就能发现,超过20M的距离Layer就会卸载,在20M以内就会加载。

进阶一下

上面用的方法4,可以简单拓展一下做一个距离裁剪
新建4个Level,按区域把场景中的控件分别放到对应level里
UE4大地图(流关卡、无缝地图)
UE4大地图(流关卡、无缝地图)
建一个新layer,加载距离为5m,把刚刚这几个新建的level放进来
UE4大地图(流关卡、无缝地图)

这时候Play就能看到,从LevelA走到LevelB时,会先加载LevelB的场景,再走到LevelB的物件非常近的地方,物件才会加载。

这样子就实现了一个简单的距离裁剪。

demo的话,因为公司上传不方便,其实根据我上面的指示也非常清楚了,实在有需要我就上传demo吧。

转载于:https://blog.51cto.com/13638120/2335587

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UE4中,关卡接缝是指在多关卡切换时,由于关卡加载的过程中可能会出现短暂的黑屏或者过渡的不畅,导致玩家感觉到关卡之间有一道明显的分界线或接缝。这个问题的解决方法有很多种。一种常用的方法是使用LevelStreaming来实现关卡的加载和切换。LevelStreaming是UE4中的一个原生功能,它可以将关卡切分成多个切片,并在合适的时机进行加载和卸载,从而实现无缝关卡切换效果。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [UE4关卡切换_详细讲解案例.doc](https://download.csdn.net/download/gaofei7439/12299406)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [UE4地图关卡无缝地图)](https://blog.csdn.net/weixin_33711641/article/details/92723741)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [UE4关卡无缝地图切换总结](https://blog.csdn.net/u012999985/article/details/78484511)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值