Bootstrap

113. UE5 GAS RPG 实现传送点切换地图

接着我们优化体验相关,首先实现检查点可以在选中点击后,可以自动移动到目标检查点。然后增加一个可以提示玩家已经探索过相关区域的光柱,最后增加一个传送点,可以通过传送点传送到其它关卡。

实现点击自动移动到检查点

先实现点击移动到检查点功能。
我们先将实现接口冲蓝图移动到c++里,之前可以当做演示,如何实现在一个物体上添加接口。
我们在高亮接口里添加一个新好用,用于获取角色需要移动到的检查点的位置。
在这里插入图片描述
在检测点类里增加一个场景组件,用于定义位置
在这里插入图片描述
增加一个可以修改自定义深度的配置
在这里插入图片描述
在构造函数里初始化
在这里插入图片描述
实现接口的三个函数
在这里插入图片描述
敌人也继承了高亮接口,但是不需要修改目标位置
在这里插入图片描述
然后在PlayerController里,鼠标抬起事件里,通过接口修改目标位置,然后通过插件计算移动路径。
在这里插入图片描述
然后打开检查点,将蓝图实现的接口内容去掉
在这里插入图片描述
修改场景组件到一个合适的位置。测试即可。
在这里插入图片描述

实现提示玩家探索过区域的灯柱

如果地形复杂,我们还需要设置一个灯柱,玩家激活以后,就会一直常亮,提醒玩家此地已经探索过。
我们在检测点类里添加一个属性,因为灯柱无法保存存档,所以,它的碰撞体是无法绑定存储回调的
在这里插入图片描述
然后事件开始,绑定回调时,通过变量判断是否需要绑定
在这里插入图片描述
接着通过类创建一个新的蓝图
在这里插入图片描述
在蓝图里设置对应的模型
在这里插入图片描述
将绑定变量设置为false,这样就无法绑定回调,我们还能定义显示颜色。
在这里插入图片描述
然后修改Sphere的碰撞体大小,在什么范围内和玩家角色碰撞会亮起。
在这里插入图片描述
在蓝图里绑定Sphere碰撞体的重叠事件
在这里插入图片描述
Handle Glow Effects会创建一个新的材质返回,我们在函数接收,并通过时间轴更新数值,让其慢慢亮起来。
在这里插入图片描述
测试效果
在这里插入图片描述

实现关卡切换

接下来,我们增加一个新的类,继承检查点类,用于实现两张地图的切换功能。
在这里插入图片描述
在类里,我们要去掉一部分检查点的功能,实现一部分新的功能。
我们首先申明了构造函数,explicit 关键字的主要作用是防止隐式转换和意外初始化。尤其是还需要调用父类的构造函数时。
在这里插入图片描述
在构造函数里,我们只做了一件事,就是将球的碰撞体附加到了移动目标组件上。
在这里插入图片描述
然后覆写父类的LoadActor函数,传送点不需要激活高亮效果,我们覆写它,不让它执行高亮函数
在这里插入图片描述
在这里插入图片描述
然后,我们增加了两个属性,一个是需要传送到的目标地图,另一个是目标地图的初始点标签。
在这里插入图片描述
最后,我们覆写球的重合事件,它和检查点的功能不同,我们将设置高亮的逻辑去掉,将角色信息和场景信息保存。最后还需要切换关卡
在这里插入图片描述
上图,我们保存场景状态时,还传入了关卡的资源路径名称,这个后面会讲到。
在存档类里,我们增加了一个新的存储名称,用于存储地图资源名称,其主要目的是为了获取设置显示的对应关卡的名称。
在这里插入图片描述
地图和名称对应的数据我们是设置在GameMode类里的,保存场景状态函数也是在GameMode类里,我们在类里增加一个新的函数,用于通过地图资源名称获取地图显示名称。
在这里插入图片描述
实现这里,通过遍历所有的设置的地图,找到对应的关卡,将显示名称返回。
在这里插入图片描述
并在保存状态函数增加一个新的参数传入
在这里插入图片描述
保存存档时,通过关卡资源名称获取到显示名称,保存到存档里,方便下次加载使用
在这里插入图片描述
接着就是保存关卡出生点的位置标签,我们是在角色保存时将新的标签保存。
我们要增加逻辑,在保存时,也需要将游戏实例上缓存的标签修改掉,这样,在未保存之前,角色也会出现在当前场景的目标位置的出生点。
在这里插入图片描述
修改完成,我们编译打开引擎,增加一个新的关卡,用于切换。
在这里插入图片描述
并将新关卡添加到GameMode蓝图里。
在这里插入图片描述
通过传送点类创建一个新的蓝图,用于切换。
在这里插入图片描述
添加模型,并修改传送位置和碰撞体大小
在这里插入图片描述
将其添加到场景里
在这里插入图片描述
并设置目标关卡和目标关卡的出生点
在这里插入图片描述
当然,自身的标签还是有用的,我们可以通过设置玩家出生点标签,在切换此关卡时,让玩家生成在传送点的PlayerStart位置。
在这里插入图片描述

;