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

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

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

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

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

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

实现关卡切换

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

### UE5 中基于 GAS 架构的 RPG 游戏开发 #### 创建角色属性系统 在 Unreal Engine 5 (UE5) 的游戏中,Gameplay Ability System (GAS) 提供了一种强大的方式来管理游戏角色的能力和属性。为了创建一个基本的角色属性系统,在项目设置中启用插件 `GameplayAbilities` 和 `GameplayTags` 是必要的[^1]。 定义自定义属性集类继承于 `UAttributeSet` 类,用于表示玩家的生命值、法力值和其他统计信息: ```cpp // MyCharacterAttributes.h #pragma once #include "CoreMinimal.h" #include "GameFramework/Actor.h" #include "AbilitySystemComponent.h" #include "MyCharacterAttributes.generated.h" /** * */ UCLASS() class MYGAME_API UMyCharacterAttributes : public UAttributeSet { GENERATED_BODY() public: UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Attributes") FGameplayAttributeData Health; ATTRIBUTE_ACCESSORS(UMyCharacterAttributes, Health) // Other attributes like Mana, Stamina can be added here similarly. }; ``` #### 实现能力框架 接着实现具体的游戏玩法功能——即“能力”。这涉及到编写新的 C++ 或蓝图脚本文件以扩展 `UGameplayAbility` 基础类。这些对象封装了执行特定动作所需的数据逻辑,比如攻击敌人或施放魔法技能等操作。 对于每个想要赋予给角色的新能力,都需要单独创建对应的子类实例并配置其行为参数。例如,可以构建名为 `AGrenadeThrowAbility` 的投掷手雷能力类,并通过编辑器界面指定冷却时间、消耗资源量以及效果范围等相关设定。 #### 设计任务与奖励机制 当考虑如何在游戏中引入任务系统时,可以通过 GAS 来追踪目标进度并向完成挑战的用户提供反馈。利用 `FGameplayTagContainer` 结合标签查询表达式匹配条件触发事件,从而动态调整难度等级或是解锁新区域等内容更新。 此外,还可以借助该系统的灵活性为不同类型的成就设立专属奖赏池,允许开发者轻松定制各种形式的经验加成、道具掉落概率提升等奖励措施。 #### 集成用户界面显示 为了让玩家能够直观了解当前状态变化情况,应该同步修改 HUD 组件以便实时反映最新数值变动。通常做法是在屏幕角落固定位置绘制小型图标条形图等形式展示生命槽、能量棒之类的关键指标;同时也可以采用弹窗提示框的方式告知重要消息通知。 最后值得注意的是,由于 GAS 自身并不直接处理 UI 层面的工作,因此这部分工作往往需要额外投入一定精力去精心打磨用户体验细节部分。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值