ue4 无限地图_UE4大地图(流关卡、无缝地图)

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

接下来开始教程。

UE4的原生功能LevelStreaming就非常适合用来做大地图,这也是生存竞技类游戏首选UE4来开发的原因之一。现在就稍微解释一下UE4的大地图实现。

对于UE4来说,Level(关卡)的概念很重要,但是为了更快的进入本文内容,我们可以把Level先当作这个大地图世界的切片,比如一个大地图你把它横竖切过成9宫格,每一片就是一个Level。而LevelStreaming(流关卡)就是用来把这些Level加载进来的方案。

现在我们就来做一个demo。功能就是像下图这样,这个世界有两个Level:A、B。角色从A走到B。两个level在合适的时机加载。

因为我自己本身也刚学习,所以我的教程也尽量详细,尽量把每个过程都照顾到。

场景建造

首先我们创建一个第一人称项目,建造这个场景

通过选择这几个cube复制粘贴,稍微摆放一下场景物件来把场景扩大,并且把中间的墙删掉

如果这时候build的话会提示场景光照需要先build,并且下面会出现这个提示

所以先等这个光照build完我们可以跑来看看。

这时候需要把场景分成两个Level,左边是A,右边是B。

先打开Level面板(Windows->Levels)

创建一个新Level,把Level放在和现在用的这个map同一路径下(必须放在同一路径,后面会讲到)

同样的方法创建LevelB。

这时候需要把当前关卡设置为LevelA

然后把场景种的所有左边的物件选中(一个一个点...),设置为LevelA的物件

可以通过隐藏这个关卡物件的按钮来看是否迁移正确

同样的方法处理LevelB

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

流关卡实现

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

方法1:通过触发器触发你的蓝图逻辑:

首先在场景中间放置一个BoxTrigger。(先把FirstPersonExampleMap切换为当前关卡)

选中BoxTrigger,之后打开关卡蓝图

这时候可以直接右键生成这个触发器的触发事件

然后就是调用这个流程最关键的接口

完成之后如果这时候你点了Play的话,会自己掉落到空场景。所以需要先把LevelA先加载进来

这时候play,从LevelA走到LevelB,你就能看到能正常加载并通过

方法2:通过代码加载

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

方法3:通过StreamingVolumes控制加载卸载

这个方法是,通过UE的控件LevelStreamingVolume,来判断是否在Level显示范围内,是则加载,否则卸载

先把刚刚的关卡蓝图的事件流程断开

在LevelB上放置一个完整包含LevelB的LevelStreamingVolume

打开LevelB的LevelDetails,设置VolumeB为它的StreamingVolume。

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

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

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

先把子Level删掉

打开WorldComposition功能。(Window->World Setting ->World -> EnableWorldComposition勾上)

然后你能看到你一直用的Levels面板多了一个按钮

同时你也会发现,你的LevelA和LevelB也在里面。

这就是为什么之前说必须放在和你当前Level同一个文件夹的原因。放在同一个文件夹下的Level都会加载到这里,作为默认可能打开的level

这时候在Levels面板里双击这两个level,就会把这两个Level加载进来

这时候Play的话,你会看到两个场景都自动加载进来了

这是因为,现在的加载距离非常远,你两个小Level都包含在里面

所以现在我们要加一个新layer,加载距离只有20m(20m以外卸载)

然后把LevelA和LevelB加载到Layer20M这(这里操作有点奇怪,有时候不显示AssignToLayer这个按钮,这个的话Unload再Load一下,瞎折腾一下就好了。。。)

这时候你在场景里走一下就能发现,超过20M的距离Layer就会卸载,在20M以内就会加载。

进阶一下

上面用的方法4,可以简单拓展一下做一个距离裁剪

新建4个Level,按区域把场景中的控件分别放到对应level里

建一个新layer,加载距离为5m,把刚刚这几个新建的level放进来

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/244220.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器系统wlanapi,没有找到wlanapi.dll怎么办?

没有找到wlanapi.dll怎么办呢?电脑提示没有找到wlanapi.dll将会导致电脑无法正常使用,因为wlanapi.dll文件中包含了系统正常运行所不可或缺的大量代码,下文小编就为大家带来无法找到wlanapi.dll的解决方法,一起去了解下吧。wlanapi.dll出错原…

用python输入任意三条边长_如何用python求第三条边边长

用Python实现“已知三角形两个直角边,求斜边”要求:用户输入两个直角边(数值为浮点类型),若非浮点类型,则提示用户,继续输入。思路:伪代码描述下步骤1、-input a value for the base as a float(输入某浮点…

最小错误率贝叶斯决策的基本思想_太赞了!机器学习基础核心算法:贝叶斯分类!(附西瓜书案例及代码实现)...

Datawhale 作者:尹晓丹,Datawhale优秀学习者寄语:首先,简单介绍了生成模型和判别模型,对条件概率、先验概率和后验概率进行了总结;其次,对朴素贝叶斯的原理及公式推导做了详细解读;再…

qprocess回调_QT进程间通信详细介绍及QProcess机制分析

1、QT通信机制为了更好的实现QT的信息交互,在QT系统中创建了较为完善的通信机制。QT的通信可分为QT内部通信和外部通信两大类。对于这两类通信机制及应用场合做如以下分析:(1)QT内部对象间通信在图形用户界面编程中,经常需要将一个窗口部件的…

1 数列分块入门_线性代数入门——利用分块矩阵简化矩阵乘法运算

系列简介:这个系列文章讲解线性代数的基础内容,注重学习方法的培养。线性代数课程的一个重要特点(也是难点)是概念众多,而且各概念间有着千丝万缕的联系,对于初学者不易理解的问题我们会不惜笔墨加以解释。在内容上,以…

junit可执行但控制层无法执行_Junit测试时ContextLoader.getCurrentWebApplicationContext()返回空值...

Junit测试时,test类调用manage类,manage类调用dao类dao类的代码中有如下语句:ContextLoader.getCurrentWebApplicationContext()执行这条语句时返回空值,程序代码如下:下面给出junit测试时的错误语句下面给出Junit运行时控制台输出的语句:九月 26, 2014 …

h5首页加载慢_H5网站制作注意了

H5自适应网站越来越受到企业的追捧,不同于原来的建站模式,H5网站可以很好是调整来达到PC端和移动端的良好展示效果,获得更友好用户体验。H5网站作为网站优化人员,小编第一个想到的并不是H5带来的炫酷效果,认识它解决了…

阿联酋esma认证_阿联酋无人驾驶汽车预计2021年上路

本报讯 迪拜消息-----据《海湾时报》11月26日报道,阿联酋标准化与计量局(ESMA;EmiratesAuthorityfor StandardisationandMetrology)局长AbdullaAlMaeeni表示,阿联酋准备成为全球第一个对无人驾驶汽车制订相关法规的国家,无人驾驶…

PyQt5 电报实时聊天软件 BB-Telegram Pt.0

使用PyQt5实现实时聊天软件 BB-Telegram 是在我BB实时聊天软件上修改的实时显示电报 源代码见下https://github.com/JiayouQin/Python-projects/tree/master/11%20PyQt5%20BB%20Telegram/CN 鉴于PyQt5实现功能篇幅较长,Pt.0不介绍实现过程。 程序主要功能&#…

base cap 分布式_高并发架构系列:详解分布式一致性ACID、CAP、BASE,以及区别

在面试环节,经常会问CAP、BASE等相关的分布式理论,其实这些名词主要还是来自于分布式的一致性,今天主要介绍分布式一致性:强一致性、最终一致性、ACID、CAP等理论。分布式一致性的背景随着分布式事务的出现,传统的单机…

读取剪贴板英语转换为国际莫斯码

Python全代码如下 执行代码之后会自动检测按键,按下CtrlZ之后程序读取剪贴板然后转换为莫斯码再次写入剪贴板 使用第三方模块: pynput win32clipboard 文章尾部附带国际莫斯码表 示例: Caesar openly defied the Senates authority by cros…

asp python 定时任务_Python定时任务轻量解决方案——Schedule

写后端的同学们可能都知道,工作中可能需要周期性执行一些任务,俗称定时任务。Linux环境下,可以借助于系统自带的crontab完成定时任务。但是很多时候,开发的同学们可能并没有权限去操作crontab,所以就催生了一些不太好的…

Pygame简单深度优先算法生成迷宫

学习路径计算之前需要一个场景,网上查了下迷宫生成方法花了点时间写了个简单的迷宫生成器 基本原理十分简单: 使用2维矩阵表示迷宫,每一个节点有四面墙,使用深度搜索,随机顺序向四个方向移动,,如果遇到已到…

wait放弃对象锁_终于搞懂了sleep/wait/notify/notifyAll,真的是不容易

sleep/wait/notify/notifyAll分别有什么作用?它们的区别是什么?wait时为什么要放在循环里而不能直接用if?简介首先对几个相关的方法做个简单解释,Object中有几个用于线程同步的方法:wait、notify、notifyAll。public c…

Pygame 使用Djkstra广度搜索寻找迷宫(相对)最短路径

基于之前写的迷宫生成器实现了Djkstra算法搜索路径。 https://blog.csdn.net/ChillingKangaroo/article/details/122800431 Djkstra基于广度优先算法,与简单搜索不同的是Djkstra在访问每一个节点的时候会计算到该节点的最短路径以及上一个节点,如果有新…

python打乱list_超实用!每 30 秒学会一个 Python 小技巧,GitHub 标星 5300!

公众号关注 “GitHubDaily”设为 “星标”,每天带你逛 GitHub!很多学习 Python 的朋友在项目实战中会遇到不少功能实现上的问题,有些问题并不是很难的问题,或者已经有了很好的方法来解决。当然,孰能生巧,当…

(开源)Flask+Vue+Bootstrap3 人力资源用Web数据库

闲着没事写了一个轻量级web数据库,在网页端访问并操作SQL,可以进行Excel(xlsx)数据导入\导出,包含用户注册\登录\授权功能,密码有hash,授权目前比较简陋:后端使用了一个列表储存授权用户 已授权用户&#…

access找不到输入表或者dual_在Access窗体中显示指定路径的图片

↑↑↑点击上方图片,了解详情在Access中,如果把图形对象以OLE格式的字段保存,那么在窗体中可以直接显示出图片来。但是这样做有以下不足:一、需要将图片逐一插入到表中,工作量太大。二、使数据库文件变得庞大。三、相同…

LeetCode 168. Excel列表名称详解

刷到了这一道简单难度题 https://leetcode-cn.com/problems/excel-sheet-column-title/https://leetcode-cn.com/problems/excel-sheet-column-title/ 粗看就是一道进制转换题不过容易掉坑里。 首先略讲一下进制转换, 以701为例,该数字可以转换为以下…

可视化管理_RFID技术实施智能仓储管理可视化

仓储物流管理在各个行业都非常重要,RFID技术助力仓储物流信息管理提高供应链管理的透明度和库存周转率,这样有效减少缺货损失,提高企业内的仓储物流效率。仓库管理过程中,存在区域划分笼统,不容易辨识,货物…