原作者:xiaosongfang

对于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吧。
-----------------------------------
著作权归作者所有:来自51CTO博客作者xiaosongfang的原创作品,如需转载,请注明出处,否则将追究法律责任
UE4大地图(流关卡、无缝地图)
https://blog.51cto.com/u_13638120/2335587

UE4大地图(流关卡、无缝地图)的更多相关文章

  1. UE4高级功能--初探超大无缝地图的实现LevelStream

    转自:http://blog.csdn.net/u011707076/article/details/44903223 LevelStream 实现超大无缝地图--官方文档学习 The Level S ...

  2. UE4流关卡

    转自:http://blog.ch-wind.com/ue4-level-streaming/ 流关卡可以使得关卡内容只在玩家“需要”的时候才加载,在很多游戏中都有使用这个技术. 当前UE4版本4.1 ...

  3. 【百度地图API】如何制作一张魔兽地图!!——CS地图也可以,哈哈哈

    原文:[百度地图API]如何制作一张魔兽地图!!--CS地图也可以,哈哈哈 摘要: 你玩魔兽不?你知道如何做一张魔兽地图不?! 快来看此文吧! ---------------------------- ...

  4. [android学习]__使用百度地图开放api编写地图定位app

    前言 在前面我已经记录关于如何使用百度地图api,以及如何配置相关的androidstudio配置了,接下来将记录如何使用百度地图api开发简单的地图定位apk,我将决定不定期持续更新本篇笔记,在每个 ...

  5. Android百度地图开发03之地图控制 + 定位

    前两篇关于百度地图的blog写的是,一些基本图层的展示 和 覆盖物的添加+地理编码和反地理编码. 接下来,这篇blog主要说一些关于地图控制方面的内容和定位功能. 百度地图提供的关于地图的操作主要有: ...

  6. 网页嵌入百度地图和使用百度地图api自定义地图的详细步骤

    在网页中插入百度地图 如果想在自己的网页上面加入百度地图的话,可以用百度地图的api.具体使用方法如下: 第一步:进入百度创建地图的网站http://api.map.baidu.com/lbsapi/ ...

  7. Swift - 使用MapKit显示地图,并在地图上做标记

    通过使用MapKit可以将地图嵌入到视图中,MapKit框架除了可以显示地图,还支持在地图上做标记. 1,通过mapType属性,可以设置地图的显示类型 MKMapType.Standard :标准地 ...

  8. 百度地图 Android SDK - 个性化地图

    什么是百度个性化地图Android SDK? 百度个性化地图Android SDK是一套基于Android 2.2及以上版本号设备的应用程序接口,您能够通过该套接口实现主要的地图功能,而且能够定制地图 ...

  9. 【高德地图API】从零开始学高德JS API(一)地图展现——仙剑地图,麻点图,街景,室内图

    原文:[高德地图API]从零开始学高德JS API(一)地图展现——仙剑地图,麻点图,街景,室内图 摘要:关于地图的显示,我想大家最关心的就是麻点图,自定义底图的解决方案了吧.在过去,marker大于 ...

  10. 【百度地图API】如何快速创建带有标注的地图?——快速创建地图工具+如何标注商家

    原文:[百度地图API]如何快速创建带有标注的地图?--快速创建地图工具+如何标注商家 摘要: 如果你不会程序,如果你不想写代码. 如果你想拥有一张自己的地图,如果你想在该地图上标注出你商店的位置. ...

随机推荐

  1. 简述 JavaScript 的执行机制

    一.单线程 为了解决这个问题,防止下一个任务等待上一个任务等待太长的时间,所以提出了 Web Worker标准,允许 JS 创建多个线程,于是JS出现了同步 和 异步 ,异步就是可以同时进行多个任务, ...

  2. vue学习笔记(五)---- vue动画

    官方文档:https://cn.vuejs.org/v2/guide/transitions.html 一.使用过度类名 没有使用动画之前: <body> <div id=" ...

  3. HTTPS基础原理和配置-3

    书接上文:HTTPS 基础原理和配置 - 2,接下来介绍: 配置 NGINX 后端 HTTPS 检查配置 配置 HSTS OCSP Stapling 重要部分来了.如何使用这些选项并配置NGINX? ...

  4. npm : 无法将“npm”项识别为 cmdlet、函数、脚本文件或可运行程序的名称

    出现问题原因: vscode运行前端命令,没有为安装的npm配置环境变量 解决办法: 配置环境变量,可查看前一篇文章nodejs 环境变量配置 配置完后还出如题原因: 重新启动vscode终端powe ...

  5. day01-Mybatis介绍与入门

    Mybatis介绍与入门 1.官方文档 Mybatis中文手册:mybatis – MyBatis 3 或者 MyBatis中文网 Maven仓库:Maven Repository: org.myba ...

  6. 有趣的python库-MyQR

    MyQR-个性二维码 基本使用 from MyQR import myqr import os myqr.run( words="hu qing nian ni zhen bang, you ...

  7. CenterOS7上搭建RabbitMQ集群

    1 保证多个主机之间能够互相访问 修改host , vi /etc/hosts 例如修改成下面的内容: 192.168.10.157 rabbitmq-1 192.168.10.159 rabbitm ...

  8. dotnet core+nginx+supervisor

    1.前提准备 安装虚拟机,安装CentOS,有云服务器的直接用云服务器就行 本地安装 xshell.xftp 2.nginx配置静态页面 我们先学习一下使用nginx配置一个静态页面,一步一步来深入 ...

  9. ImGui窗口标题栏的高度

    FontSize + FramePadding.y * 2 具体参考How to customize titlebar elements? · Issue #1539 · ocornut/imgui ...

  10. 随机颜色,加载loading效果,节流,应用周期函数,wxs

    随机颜色 data: { colorList:[] }, getColor(){ wx.request({ url: 'https://www.escook.cn/api/color', method ...