跳转至

任务系统

DataTable 驱动 · 父类统一管理 · AI 辅助开发。

这个系统是怎么来的

这套任务系统的蓝图逻辑我没有手写——我把需求描述给网页版 DeepSeek,它直接生成了蓝图连线方案,我照着连的。

所以不要觉得"我不会写复杂的任务系统",现在的 AI 完全能帮你写。你只需要理解系统怎么跑参数怎么填,逻辑让 AI 来。

运行方式

一句话概括:玩家点击仪器 → 任务管理器查表校验 → 通过就播动画 → 推进到下一步。

展开来讲:

  1. 关卡开始,BP_TaskManager1 读取 DT_Tasks 数据表,拿到所有步骤
  2. 界面显示当前步骤的提示文字
  3. 玩家点击场景里的仪器 → 仪器通知任务管理器"我被点了,我的 ID 是 XX"
  4. 任务管理器查当前步骤的 DataTable 行,看玩家点的仪器 ID 是否匹配
  5. 匹配 → 步骤完成 → 播关卡序列动画 → 推进到下一步
  6. 不匹配 → 忽略,或者弹提示
  7. 如果是多步任务(需要依次点多个仪器),任务管理器内部计次,全部点完才推进
  8. 序列播完 → 自动进入下一步,刷新 UI 提示
  9. 所有步骤完成 → 实验结束

构建思路:父类统一 + DataTable 驱动

10 种实验仪器(烧杯、试管、酒精灯……),如果每个写一份点击逻辑,10 份代码,改一处要改 10 遍。

所以做了一个仪器父类 BP_LabEquipmentBase,通用逻辑全写里面——点击检测、部件映射、通知任务管理器、播放音效。10 个子类只需要配几个参数(模型、ID、名称),逻辑一行不用写。

任务流程同理——步骤顺序、目标仪器、关联的序列动画,全放 DT_Tasks 数据表里。改流程不用动蓝图,改表就行。

数据表参数说明

DT_Tasks 的每一行就是一个实验步骤,字段如下:

字段 类型 怎么填
StepNumber 整数 步骤编号,显示用,填 1、2、3……
juti_TaskDescription 文本 就是口语化描述
Title 文本 总步骤如:第一步:取样
jian_TaskDescription 文本 具体要点击哪个仪器的描述
TargetEquipmentID 整数 需点击仪器整体特定部件时才填,如果是多部点击后播放动画就填0
TargetEquipmentIDs 整数数组 多步操作时才填,按填写ID顺序点击触发
TargetPartID 整数 需要点击仪器的特定部件时才填,填 0 表示不区分部件
TargetSequence 关卡序列 点击后播放的关卡序列
bIsCompleted 布尔 是否已经完成该步骤,是则跳过该步骤
bIsMultiStep 布尔 多步判断,是则需要填写TargetEquipmentIDs
CurrentClickIndex 整数 都是填0,不用管,基本不用了,这是旧版本的产物
OperationName 文本 悬浮正确仪器的黄色小字
UI_Widget 控件 点击特定仪器需要一个控件显示对应内容,为空则无
image 纹理2D 下一个步骤需要点击的仪器的缩略图
sound 音效基础 下一个步骤需要播放的步骤语音
zhi_yin 布尔 点击对应仪器后是否显示地下的蓝色箭头
duobu_image 整数映射纹理2D 多步下下一个需要点击的仪器缩略图
OnTaskCompleted? 布尔 是否播放右上角提示动画
TaskCompleted 文本 提示动画文本的内容

仪器子类怎么配置

模仿别的仪器配置就好了,替换原来模型,填写唯一的ID,仪器名字,子部件也是复制已经配置好的(所有子部件命名规范:ID*100+1、2、3、4等)

序列管理器

BP_SequenceManager 负责播关卡序列动画。任务管理器说"播这个序列",它就创建序列播放器,播完回调任务管理器说"完了",任务管理器推进下一步。

UI 面板

WBP_TaskPanel 负责显示提示文字和按钮。任务管理器调函数刷新文本,UI 本身不参与逻辑。

按钮: - 返回 → 回退一步,重置完成状态 - 操作 → 与点击效果一致

踩过的坑

早期试过在蓝图里直接建一个结构体数组填实验步骤,编辑器崩了几次后数据全丢。后来换成 DataTable 驱动——数据存在表格资产里,编辑器崩了表还在。改流程也不用开蓝图,直接改表就行。