ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

如何读懂 Quest System Pro 核心架构:Quest、Task 与 TaskStatus 状态机设计完整指南

如何读懂 Quest System Pro 核心架构:Quest、Task 与 TaskStatus 状态机设计完整指南 如何读懂 Quest System Pro 核心架构Quest、Task 与 TaskStatus 状态机设计完整指南【免费下载链接】Quest-System-Pro项目地址: https://gitcode.com/gh_mirrors/qu/Quest-System-ProQuest System Pro 是一款面向 Unity 的高性能任务系统插件它通过 Quest任务、Task子目标与 TaskStatus状态枚举三层状态机让开发者用数据驱动的方式快速搭建 RPG 式任务玩法。本文用最少的代码带你读懂 Quest System Pro 核心架构中状态机设计原理新手也能轻松上手。一、核心架构总览三层结构一眼看懂图Quest System Pro 演示场景MainDemo使用的草地纹理素材位于 Demos/Textures 目录官方 Demo 中用它搭建了完整的任务演示关卡Quest System Pro 的任务系统可以抽象为“容器 → 子目标 → 状态”的三层结构配合一个全局管理器层级类型职责核心文件容器层Quest一个完整任务名称、描述、图标、任务列表、奖励、前置条件、时限Assets/Devdog/QuestSystemPro/Scripts/Quests/Quest.cs子目标层Task一个子目标key、进度值、进度上限、奖励、超时判定Assets/Devdog/QuestSystemPro/Scripts/Quests/Task.cs状态层TaskStatus/QuestStatus状态枚举状态机流转的“节点”Assets/Devdog/QuestSystemPro/Scripts/Quests/TaskStatus.cs、QuestStatus.cs管理层QuestManager单例管理器聚合所有任务状态、统一分发事件Assets/Devdog/QuestSystemPro/Scripts/Managers/QuestManager.cs最值得关注的一点Quest是 Unity 的 ScriptableObject 数据资产见 Demo 中的Assets/Devdog/QuestSystemPro/Demos/Files/Databases/QuestDatabase.asset。策划配置的数据和运行时逻辑完全分离这就是“数据驱动”的起点。二、TaskStatus 状态机任务的最小状态单元打开 TaskStatus.cs 会发现它只有 4 个状态InActive未激活 → Active进行中 → Completed已完成 │ └─→ Failed已失败状态流转遵循三条清晰的路径激活Task.Activate()只允许从InActive出发进入Active并记录开始时间若任务开启了useTimeLimit同时启动倒计时。完成Task.Complete()先调用CanComplete()做守卫检查进度达标没超时奖励能发放全部通过才写入Completed并停止计时器。失败与重置Fail()将任务置为FailedCancel()/ResetProgress()则把进度清零、状态退回InActive任务可随时重新激活。这个状态机有两个关键设计点建议新手重点体会状态写入被“上锁”Task.status的 setter 是protected外部无法随意改状态只能通过Activate()、Complete()、Fail()等语义化方法流转每次状态变化都会自动触发OnStatusChanged事件。进度与状态解耦SetProgress()只改进度数值并触发OnProgressChanged是否自动完成由autoComplete开关决定关闭时业务方需手动调用Complete()。这让“打怪 3/10 只”这类进度提示和“任务完成”弹窗各自独立。三、QuestStatus 与 Task 状态如何联动QuestStatus.cs 定义了任务级 4 状态Active、Completed、InActive、Cancelled。真正的精华在于子任务状态如何向上传播事件订阅给 Quest 分配任务列表时Quest会自动为每个Task订阅状态、进度、超时三类事件见 Quest.cs 中的RegisterEventsOnTasks。自动推进当某个 Task 变为CompletedQuest.NotifyTaskStatusChanged会自动激活下一个InActive任务——串行模式的“下一步”就是这么实现的。自动完结开启autoCompleteWhenTasksAreDone后所有必需任务进度达标时任务自动进入发奖完成流程。任务执行顺序由TaskOrder枚举控制TaskOrder.cs模式行为进度写入保护Parallel并行激活时所有 Task 同时进入 Active无额外限制Single串行只激活第一个 Task完成后自动激活下一个CanSetTaskProgress会检查前面的任务是否已完成未完成则拒绝写入进度还有一个很贴心的设计可重复任务。Quest 持有maxRepeatTimes与运行时计数repeatedTimes完成时若次数未达上限状态回落到InActive可再次接取达到上限才变为Completed——这就是“每日任务做 3 次”这类玩法的底层实现。四、CanXxx ConditionInfo带“理由”的状态守卫Quest 的每个状态变更前都有一套CanXxx守卫方法CanActivate()、CanComplete()、CanCancel()、CanDecline()它们不返回简单的 bool而是返回ConditionInfo——“能不能 为什么不能”打包返回原因来自语言库天然支持多语言。以接取任务为例CanActivate()会依次检查✅ 前置“已完成”任务是否都已完成✅ 前置“进行中”任务是否都处于激活状态✅ 重复次数是否未超限✅ 玩家当前激活任务数是否低于playerMaxActiveQuests上限✅ 自定义IQuestCondition条件是否满足这种设计让 UI 可以直接弹出“需要先完成《欢迎来到津戈市》”这类提示而不是一个冷冰冰的“不可接取”。五、新手上手路线图从哪几个文件开始读按下面的顺序阅读一天内即可吃透 Quest System Pro 核心架构⏱️ 10 分钟读两个状态枚举TaskStatus.cs、QuestStatus.cs各只有几行。 30 分钟读Task.cs重点看status属性、SetProgress()、Complete()。 1 小时读Quest.cs重点看Activate()、NotifyTaskStatusChanged()、CompleteAndGiveRewards()。 30 分钟读QuestManager.cs理解全局状态聚合与事件转发。️ 打开 Demo 场景MainDemo.unity配合QuestDatabase.asset数据对照编辑器观察真实任务配置。六、小结Quest System Pro 核心架构的设计原理可以浓缩为四句话数据驱动Quest/Task 是可序列化的配置数据策划改数据即可调玩法状态机清晰4 状态 语义化方法 事件通知流转路径可预期⬆️自底向上联动Task 事件冒泡到 Quest再转发到 QuestManagerUI 只需订阅管理器️守卫式变更所有状态变更前都有CanXxxConditionInfo拒绝并附带多语言理由。理解了这套 Quest → Task → TaskStatus 的状态流转机制你就能在 Demo 基础上快速扩展自定义任务类型继承 Task 覆写CanComplete()/Complete()即可这正是该任务系统扩展性强的根本原因。【免费下载链接】Quest-System-Pro项目地址: https://gitcode.com/gh_mirrors/qu/Quest-System-Pro创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表