【UE4】任务和成就系统的蓝图代码设计

背景

现在在做的游戏中需要设计一个成就系统。实现成就系统不难,但是想要尽量将成就系统和游戏玩法解耦,保证更好的可拓展性,就需要一点设计。

以下是我实现任务或成就系统的想法。

基本结构

在这里插入图片描述

在这个设计中,添加一个成就的步骤:

(1)多创建一个组件类,写判断是否完成的逻辑
(2)在游戏实体中加入事件分发器,发送消息
(3)在组件中绑定事件,接受消息
(4)在成就系统中加入组件、

设计的好处

(1)添加新的成就的时候不需要动用原有的成就文件,方便源码管理和多人并行合作
(2)可以在本地确认成就无误之后再加入成就系统,提高代码安全性
(3)游戏核心玩法只需要发送消息,而不需要知道成就系统的类,最大程度上的减少了游戏玩法和成就系统的耦合

举例实现

实现一个统计跳跃次数,并且达到100次的成就

1.创建好成就组件

在这里插入图片描述

  • 首先创建一个符合成就名字的组件

在这里插入图片描述

  • 逻辑很简单,每次跳跃计数+1,达到100完成成就

2.创建事件分发器创建逻辑

在这里插入图片描述
在这里插入图片描述

  • 创建好事件分发器,将他拖出来,选择call

在这里插入图片描述

  • 在你需要和成就挂钩的逻辑后面加上这个call(这里只用于演示)
  • 这样的好处是不需要删改原有逻辑,你也可以用一些方法将这个逻辑单独出来

3. 组件绑定事件

在这里插入图片描述

  • 在组件一开始,就要获取能够发送消息的对象,使用bind接收消息
  • UE可以同时bind好几个对象的事件分发器,所以这样子写也是完全可以同时接收的。

在这里插入图片描述

  • 创建Bind的事件,并调用前面写好的判定逻辑

4. 创建成就系统加入组件

在这里插入图片描述

  • 成就系统可以写在很多地方,可以写在Gamemode里面,也可以写Actor,严格来说他应该用单例模式设计才行。

在这里插入图片描述

  • 将写好的组件放入成就系统进行调试

测试

在这里插入图片描述

  • 两个球的跳跃都可以计数

猜你喜欢

转载自blog.csdn.net/Alexander_420/article/details/130575480