博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
UE4大地图(流关卡、无缝地图)
阅读量:5749 次
发布时间:2019-06-18

本文共 2217 字,大约阅读时间需要 7 分钟。

对于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

你可能感兴趣的文章
我的友情链接
查看>>
XP 安装ORACLE
查看>>
八、 vSphere 6.7 U1(八):分布式交换机配置(vMotion迁移网段)
查看>>
[转载] 中华典故故事(孙刚)——19 万岁
查看>>
修改hosts文件里面的主机名,oralce asm无法启动
查看>>
Maven学习总结(十)——使用Maven编译项目gbk的不可映射问题
查看>>
php5编译安装常见错误和解决办法集锦
查看>>
Linux远程访问及控制
查看>>
MongoDB实战系列之五:mongodb的分片配置
查看>>
Unable to determine local host from URL REPOSITORY_URL=http://
查看>>
Java Tomcat SSL 服务端/客户端双向认证(二)
查看>>
java基础(1)
查看>>
ORACLE配置,修改tnsnames.ora文件实例
查看>>
用户无法在输入框中键入数字
查看>>
Workstation服务无法启动导致无法访问文件服务器
查看>>
Gradle:Basic Project
查看>>
.Net组件程序设计之远程调用(二)
查看>>
ant中文教程
查看>>
Linux常用命令(一)
查看>>
安装和使用 Elasticsearch
查看>>