# 新手引导系统 **本文档引用的文件** - [Guide.ts](file://assets/script/game/common/config/Guide.ts) - [GuideConComp.ts](file://assets/script/game/map/GuideConComp.ts) - [GuideSetpComp.ts](file://assets/script/game/map/GuideSetpComp.ts) - [GameUIConfig.ts](file://assets/script/game/common/config/GameUIConfig.ts) - [GameEvent.ts](file://assets/script/game/common/config/GameEvent.ts) - [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts) - [guide_step.prefab](file://assets/resources/gui/element/guide_step.prefab) ## 目录 1. [简介](#简介) 2. [系统架构](#系统架构) 3. [核心数据结构](#核心数据结构) 4. [引导配置管理](#引导配置管理) 5. [引导流程控制](#引导流程控制) 6. [UI高亮与交互](#ui高亮与交互) 7. [事件监听与进度管理](#事件监听与进度管理) 8. [与Oops GUI系统集成](#与oops-gui系统集成) 9. [实际应用示例](#实际应用示例) 10. [跳过逻辑与资源清理](#跳过逻辑与资源清理) 11. [总结](#总结) ## 简介 新手引导系统是游戏中的重要组成部分,用于指导新玩家了解游戏的基本操作和核心玩法。本系统基于Oops框架构建,采用组件化设计,支持多种引导类型,具备完善的进度管理和事件驱动机制。 系统的主要特点包括: - 支持点击、拖拽、提示、等待等多种引导类型 - 基于事件驱动的触发机制 - 完善的进度跟踪和状态管理 - 与Oops GUI系统的深度集成 - 可扩展的配置化引导方案 ## 系统架构 新手引导系统采用分层架构设计,包含配置层、控制层和UI层三个主要部分: ```mermaid graph TB subgraph "配置层" GC[GuideConfig
引导配置] GEC[EndEventToKey
事件映射] GT[GuideTypes
引导类型] end subgraph "控制层" GCC[GuideConComp
引导控制器] SM[SingletonModule
单例模块] GE[GameEvent
游戏事件] end subgraph "UI层" GSC[GuideSetpComp
引导步骤UI] GUI[Oops GUI
界面管理] GS[Guide Step
引导步骤] end subgraph "资源层" PREFAB[guide_step.prefab
引导UI预制体] CONFIG[GameUIConfig
UI配置] end GC --> GCC GEC --> GCC GT --> GCC GCC --> GSC SM --> GCC GE --> GCC GSC --> GUI GUI --> GS PREFAB --> GSC CONFIG --> GUI ``` **图表来源** - [Guide.ts](file://assets/script/game/common/config/Guide.ts#L1-L283) - [GuideConComp.ts](file://assets/script/game/map/GuideConComp.ts#L1-L220) - [GuideSetpComp.ts](file://assets/script/game/map/GuideSetpComp.ts#L1-L268) ## 核心数据结构 ### 引导步骤类型枚举 系统定义了四种基本的引导步骤类型: | 类型 | 枚举值 | 描述 | 适用场景 | |------|--------|------|----------| | 点击操作 | `CLICK` | 用户需要点击目标节点 | 按钮激活、功能解锁 | | 拖拽操作 | `DRAG` | 用户需要拖拽目标节点 | 物品移动、场景探索 | | 显示提示 | `TIP` | 显示文字提示信息 | 游戏说明、规则介绍 | | 等待操作 | `WAIT` | 等待特定时间或条件 | 动画播放、效果展示 | ### 引导步骤配置接口 每个引导步骤都遵循统一的配置接口规范: ```mermaid classDiagram class IGuideStep { +string id +GuideStepType type +number key +string targetPath +string tipParent +string tipText +Vec2 tipOffset +Vec2 handOffset +string nextStep +boolean skippable +function condition +UIID uiId +number waitTime +string end_event +boolean noInput } class GuideStepType { <> CLICK DRAG TIP WAIT } class UIID { <> Guide = 1001 } IGuideStep --> GuideStepType IGuideStep --> UIID ``` **图表来源** - [Guide.ts](file://assets/script/game/common/config/Guide.ts#L25-L50) **章节来源** - [Guide.ts](file://assets/script/game/common/config/Guide.ts#L1-L283) ## 引导配置管理 ### 引导配置数据结构 引导系统采用数字ID与字符串ID双重索引的方式管理引导配置: ```mermaid erDiagram GuideConfig { number key PK string id UK GuideStepType type number target_key string target_path string tip_text vec2 hand_offset string next_step number wait_time string end_event boolean skippable } EndEventToKey { string end_event PK array guide_keys } SingletonModule { array guides number current_guide } GuideConfig ||--o{ EndEventToKey : "maps to" SingletonModule ||--o{ GuideConfig : "tracks progress" ``` **图表来源** - [Guide.ts](file://assets/script/game/common/config/Guide.ts#L52-L120) - [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L35-L40) ### 引导配置示例 系统提供了完整的三步引导示例,展示了不同类型引导的实际应用场景: | 步骤ID | 类型 | 目标路径 | 提示文本 | 手指偏移 | |--------|------|----------|----------|----------| | welcome | WAIT | root/gui/LayerUI/role_controller/mission_home/start/name | "伟大的勇者,欢迎来到 『像素模拟战』" | {42, -45} | | start_battle | CLICK | root/gui/LayerUI/role_controller/mission_home/start/name | "请带领您的英雄抵御兽人的入侵吧!" | {42, -45} | | hero_page | CLICK | root/gui/LayerUI/role_controller/mission_home/btns/heros | "在酒馆招募更多英雄增强队伍" | {42, -45} | **章节来源** - [Guide.ts](file://assets/script/game/common/config/Guide.ts#L52-L120) ## 引导流程控制 ### 引导控制器架构 引导控制器负责整个引导流程的协调和管理: ```mermaid sequenceDiagram participant Player as 玩家 participant GCC as GuideConComp participant SM as SingletonModule participant GSC as GuideSetpComp participant GUI as Oops GUI Player->>GCC : 触发引导事件 GCC->>GCC : 验证引导权限 GCC->>GSC : 创建引导步骤UI GSC->>GUI : 打开引导界面 GUI-->>GSC : UI加载完成 GSC->>GSC : 显示引导内容 Player->>GSC : 完成引导操作 GSC->>GCC : 步骤完成回调 GCC->>GCC : 检查下一步骤 GCC->>GSC : 启动下一引导 Note over GCC,GSC : 循环直到引导完成 ``` **图表来源** - [GuideConComp.ts](file://assets/script/game/map/GuideConComp.ts#L40-L80) - [GuideSetpComp.ts](file://assets/script/game/map/GuideSetpComp.ts#L80-L120) ### 引导启动机制 引导系统采用事件驱动的启动方式,支持多种触发条件: ```mermaid flowchart TD Start([引导启动请求]) --> CheckPermission{检查权限} CheckPermission --> |权限不足| ReturnError[返回错误] CheckPermission --> |权限充足| GetGuide[获取引导配置] GetGuide --> ValidateConfig{验证配置} ValidateConfig --> |配置无效| ReturnError ValidateConfig --> |配置有效| ClosePrevious[关闭之前引导] ClosePrevious --> OpenUI[打开引导UI] OpenUI --> ShowStep[显示引导步骤] ShowStep --> WaitInput[等待用户输入] WaitInput --> CompleteStep[完成步骤] CompleteStep --> CheckNext{是否有下一步} CheckNext --> |有| StartNext[启动下一引导] CheckNext --> |无| CompleteGuide[完成引导] StartNext --> ShowStep CompleteGuide --> End([引导结束]) ReturnError --> End ``` **图表来源** - [GuideConComp.ts](file://assets/script/game/map/GuideConComp.ts#L50-L90) **章节来源** - [GuideConComp.ts](file://assets/script/game/map/GuideConComp.ts#L1-L220) ## UI高亮与交互 ### 引导步骤UI组件 引导步骤UI组件负责显示引导内容和处理用户交互: ```mermaid classDiagram class GuideSetpComp { +Label tipLabel +Node tipNode +Node handNode +Button skipButton -IGuideStep currentStep -number currentStepIndex -number totalSteps -Node _targetNode -Node _tipParent -boolean _showTip -boolean _showHand -any _callback -boolean _noInput -boolean _hasTouchListener +onAdded(args) void +handleStepInfo(data) void +findTargetNode(path) Node +showStep(step, index, total) void +onTouchStart(event) void +addTouchListener() void +removeTouchListener() void +onSkipButtonClick() void +cleanup() void } class GuideStepType { <> CLICK DRAG TIP WAIT } GuideSetpComp --> GuideStepType ``` **图表来源** - [GuideSetpComp.ts](file://assets/script/game/map/GuideSetpComp.ts#L10-L50) ### 目标节点查找机制 系统提供了灵活的目标节点查找机制,支持相对路径和绝对路径两种方式: ```mermaid flowchart TD Start([开始查找目标节点]) --> SplitPath[分割路径字符串] SplitPath --> GetScene[获取场景根节点] GetScene --> LoopPath{遍历路径段} LoopPath --> |路径段存在| GetChild[获取子节点] LoopPath --> |路径段不存在| NotFound[节点未找到] GetChild --> CheckChild{检查子节点} CheckChild --> |找到| NextSegment[下一段] CheckChild --> |未找到| NotFound NextSegment --> MoreSegments{还有更多段?} MoreSegments --> |是| LoopPath MoreSegments --> |否| Found[节点找到] NotFound --> LogError[记录错误日志] Found --> ReturnNode[返回节点对象] LogError --> ReturnNull[返回null] ``` **图表来源** - [GuideSetpComp.ts](file://assets/script/game/map/GuideSetpComp.ts#L180-L220) **章节来源** - [GuideSetpComp.ts](file://assets/script/game/map/GuideSetpComp.ts#L1-L268) ## 事件监听与进度管理 ### 事件监听机制 引导系统实现了完善的事件监听机制,支持多种交互方式: ```mermaid sequenceDiagram participant GSC as GuideSetpComp participant Node as UI节点 participant Touch as 触摸系统 participant Callback as 回调函数 GSC->>Node : 添加触摸监听器 Node->>Touch : 注册事件监听 Touch-->>Node : 触摸事件发生 Node->>GSC : 触摸事件回调 GSC->>GSC : 验证引导类型 GSC->>Callback : 调用完成回调 Callback->>GSC : 清理资源 GSC->>Node : 移除监听器 ``` **图表来源** - [GuideSetpComp.ts](file://assets/script/game/map/GuideSetpComp.ts#L50-L90) ### 进度管理系统 系统采用数组形式管理引导进度,每个引导步骤对应数组的一个元素: | 状态 | 数值 | 描述 | 影响 | |------|------|------|------| | 未开始 | 0 | 引导尚未执行 | 可以正常启动 | | 进行中 | 0 | 引导正在执行 | 阻止重复启动 | | 已完成 | 1 | 引导已经完成 | 不再显示该引导 | | 已跳过 | 2 | 用户主动跳过 | 标记状态但不影响其他引导 | **章节来源** - [GuideConComp.ts](file://assets/script/game/map/GuideConComp.ts#L130-L170) - [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L80-L90) ## 与Oops GUI系统集成 ### GUI集成架构 新手引导系统与Oops GUI系统深度集成,利用其强大的界面管理能力: ```mermaid graph LR subgraph "Oops GUI系统" GM[GUI Manager] LM[Layer Manager] PM[Prefab Manager] end subgraph "引导系统" GCC[GuideConComp] GSC[GuideSetpComp] UI[UI Config] end subgraph "资源管理" PREFAB[guide_step.prefab] ASSETS[引导资源] end GCC --> GM GSC --> LM UI --> PM PREFAB --> PM ASSETS --> PM GM --> UI LM --> GSC PM --> PREFAB ``` **图表来源** - [GameUIConfig.ts](file://assets/script/game/common/config/GameUIConfig.ts#L20-L35) - [GuideConComp.ts](file://assets/script/game/map/GuideConComp.ts#L170-L200) ### UI配置管理 系统通过统一的UI配置管理引导界面的加载和显示: | 配置项 | 值 | 说明 | |--------|-----|------| | UIID.Guide | 1001 | 引导界面的唯一标识 | | LayerType | UI | 界面层级类型 | | Prefab路径 | gui/element/guide_step | 引导UI预制体路径 | | Bundle | resources | 资源包名称 | **章节来源** - [GameUIConfig.ts](file://assets/script/game/common/config/GameUIConfig.ts#L1-L36) ## 实际应用示例 ### 新增三步引导流程 以下是如何新增一个完整的三步引导流程的完整示例: #### 1. 配置引导数据 ```typescript // 在Guide.ts中添加新的引导配置 export const GuideConfig: { [key: number]: IGuideStep } = { // ... 现有引导配置 ... 11: { id: "new_feature_tutorial", type: GuideStepType.CLICK, key: 11, targetPath: "root/gui/LayerUI/new_feature_panel/button", tipText: "点击这里体验新功能!", handOffset: { x: 42, y: -45 }, nextStep: "feature_explanation", skippable: true }, 12: { id: "feature_explanation", type: GuideStepType.TIP, key: 12, targetPath: "root/gui/LayerUI/new_feature_panel/explanation", tipText: "这是全新的功能特性,让游戏更加有趣!", tipOffset: { x: 0, y: 100 }, waitTime: 3000, nextStep: "feature_usage" }, 13: { id: "feature_usage", type: GuideStepType.CLICK, key: 13, targetPath: "root/gui/LayerUI/new_feature_panel/usage_button", tipText: "现在尝试使用这个功能吧!", handOffset: { x: 42, y: -45 }, skippable: true } }; ``` #### 2. 触发引导启动 ```typescript // 在适当的游戏事件中触发引导 oops.message.dispatchEvent(GameEvent.GuideStart, 11); ``` #### 3. 处理用户交互 系统会自动处理用户的点击、拖拽等交互行为,并根据配置自动推进到下一步骤。 #### 4. 完成回调处理 当引导完成后,系统会自动更新进度状态并清理相关资源。 **章节来源** - [Guide.ts](file://assets/script/game/common/config/Guide.ts#L52-L120) - [GuideConComp.ts](file://assets/script/game/map/GuideConComp.ts#L50-L90) ## 跳过逻辑与资源清理 ### 跳过按钮实现 引导系统提供了完善的跳过功能,允许用户主动终止引导流程: ```mermaid flowchart TD Start([用户点击跳过]) --> HideTips[隐藏提示内容] HideTips --> DestroyHands[销毁手势动画] DestroyHands --> RemoveListeners[移除事件监听器] RemoveListeners --> CallCallback[调用完成回调] CallCallback --> CleanupResources[清理资源] CleanupResources --> CloseUI[关闭引导界面] CloseUI --> End([跳过完成]) ``` **图表来源** - [GuideSetpComp.ts](file://assets/script/game/map/GuideSetpComp.ts#L240-L260) ### 资源清理机制 系统实现了多层次的资源清理机制,确保内存使用效率: | 清理阶段 | 清理内容 | 触发时机 | |----------|----------|----------| | 步骤完成 | 移除触摸监听器 | 每个步骤结束后 | | 引导取消 | 销毁UI组件 | 用户跳过时 | | 组件销毁 | 清理所有资源 | 组件生命周期结束 | | 内存回收 | 释放引用 | 系统垃圾回收 | **章节来源** - [GuideSetpComp.ts](file://assets/script/game/map/GuideSetpComp.ts#L240-L268) ## 总结 新手引导系统是一个功能完善、架构清晰的游戏辅助系统。它具有以下核心优势: 1. **模块化设计**:采用分层架构,职责明确,易于维护和扩展 2. **事件驱动**:基于事件的触发机制,灵活性强,适应各种游戏场景 3. **配置化管理**:支持通过配置文件管理引导流程,减少代码耦合 4. **资源优化**:完善的资源清理机制,确保良好的性能表现 5. **用户体验**:直观的UI设计和流畅的交互体验 开发者可以通过本系统快速实现各种类型的引导功能,为新用户提供良好的游戏体验。系统的可扩展性也确保了随着游戏发展,可以轻松添加新的引导内容和功能。