Files
ChildHood/.claude/skills/requirements-analysis/references/diagram-guide.md
T
starmen1265 c3c10a9fcb refactor(skills): Agent架构重构——去阶段/去步骤号/审查纯Issue化/工作流拆技能/目录扁平化
- game-reviewer: 删除本地审查记录,仅Issue评论
- quality-gate-review: 删除审查记录/步骤号/阶段标准
- game-dev: 删除阶段感知节,4个工作流详情拆到技能
- game-designer: 删除原型/批量生产阶段,执行案规范拆到技能
- game-pm: 去掉节号和步骤号
- 全局去掉步骤标号(①-⑧/步骤1-5/1.4.X/第一步-第四步)
- 新建技能: code-implementation/deviation-report/design-execution
- 原型目录扁平化: docs/design/prototype/* → docs/design/
- requirements-analysis及子文件去步骤号和阶段引用
- stage-iteration/sketch/roadmap去任务编号
- 更新所有docs/design/路径引用
2026-06-08 16:03:24 +08:00

298 lines
9.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Mermaid 图表语法速查与项目约定
本文档为需求分析 skill 中各类图表的 Mermaid 语法参考和项目特定约定。
---
## 1. Mermaid 语法速查
### 1.1 功能领域图
使用 `flowchart` 展示功能模块及其交互关系。模块级抽象,不涉及类级别细节。
**语法模板**:
```mermaid
flowchart TD
subgraph 输入层
PlayerInput[玩家输入模块]
end
subgraph 核心层
Movement[移动控制模块]
Interaction[交互管理模块]
end
subgraph 数据层
ItemData[物品数据模块]
CollectionData[收集数据模块]
end
PlayerInput --> Movement
PlayerInput --> Interaction
Interaction -->|查询可交互物| ItemData
Interaction -->|通知收集| CollectionData
```
**要点**:
- 使用 `subgraph` 划分模块边界(如输入层、核心层、数据层)
- 节点使用中文标签标注模块职责
- 边上可加 `|文字|` 说明交互类型
- 不同层可用 `style` 着色区分
**样式区分**(可选):
```mermaid
flowchart TD
A[模块A] --> B[模块B]
A -.->|事件通知| C[模块C]
style A fill:#e1f5fe
style B fill:#f3e5f5
style C fill:#e8f5e9
```
- `-->` 实线:主数据流 / 同步调用
- `-.->` 虚线:事件通知 / 异步通信
---
### 1.2 类设计图
使用 `classDiagram` 展示类的关键数据、接口和关系。
**语法模板**:
```mermaid
classDiagram
class UInteractionManager {
-EInteractionState State
-EInteractPhase Phase
-TArray~UInteractableComponent*~ NearbyInteractables
+BeginInteract(UInteractableComponent* Target) void
+EndInteract() void
+TickComponent(float DeltaTime) void
#OnDetectionEnter(UPrimitiveComponent* Overlapped) void
}
class IChildHoodInteractable {
<<interface>>
+GetInteractableData() FInteractableData
+OnInteract(AChildHoodCharacter* Player) void
}
class UInteractableComponent {
-FInteractableData Data
-USphereComponent* DetectionSphere
+GetInteractableData() FInteractableData
+OnInteract(AChildHoodCharacter* Player) void
}
class AChildHoodCharacter {
-UInteractionManager* InteractionManager
-bool bIsInteracting
+SetInteracting(bool bValue) void
}
UInteractionManager --> UInteractableComponent : 检测并驱动
UInteractableComponent ..|> IChildHoodInteractable : 实现
AChildHoodCharacter *-- UInteractionManager : 组合(持有)
UInteractableComponent o-- USphereComponent : 聚合(引用)
```
**关系类型速查**:
| 关系 | 语法 | 含义 | UE5 中的典型场景 |
|------|------|------|------------------|
| 继承 | `<\|--` | 子类继承父类 | `ACharacter` 的子类 |
| 实现 | `..\|>` | 实现接口 | `UInterface` 的实现类 |
| 组合 | `*--` | 生命周期绑定,整体拥有部分 | Character 持有 Component |
| 聚合 | `o--` | 引用关系,部分可独立存在 | Component 引用另一个 Actor |
| 依赖 | `..>` | 使用关系,临时引用 | 方法参数、局部变量 |
| 关联 | `-->` | 持久引用 | 成员指针引用 |
**可见性标记**:
| 标记 | 含义 | UE5 惯例 |
|------|------|---------|
| `+` | public | `UFUNCTION(BlueprintCallable)` |
| `-` | private | 内部状态 |
| `#` | protected | 子类可访问 |
**UE5 类命名约定**:
| 前缀 | 类型 | 示例 |
|------|------|------|
| `A` | Actor | `AChildHoodCharacter` |
| `U` | UObject / Component | `UInteractionManager` |
| `I` | Interface | `IChildHoodInteractable` |
| `F` | Struct / Enum | `FInteractableData` |
| `E` | Enum | `EInteractType` |
---
### 1.3 时序图
使用 `sequenceDiagram` 追踪复杂特性的跨系统调用流程。
**语法模板**:
```mermaid
sequenceDiagram
autonumber
participant Player as 玩家
participant PC as PlayerController
participant IM as InteractionManager
participant IC as InteractableComponent
participant CM as CollectionManager
Player->>PC: 按 E 键 (IA_Interact)
activate PC
PC->>IM: BeginInteract(SelectedInteractable)
deactivate PC
activate IM
IM->>IM: 状态 Free -> Interacting
IM->>IM: 子阶段 Enter (转向+推镜)
IM->>IC: OnInteract(Player)
activate IC
IC->>IC: 检查交互类型 (Pickup)
IC->>CM: AddItem(ItemId, Category)
activate CM
CM-->>IC: 收集成功
deactivate CM
IC-->>IM: 交互完成
deactivate IC
IM->>IM: 子阶段 Exit (回位+淡出)
IM->>IM: 状态 Interacting -> Free
deactivate IM
```
**要点**:
- `participant` 使用 UE5 类名缩写 + 中文别名
- `activate` / `deactivate` 展示调用栈深度
- `->>` 同步调用,`-->>` 返回,`--)` 异步通知
- `autonumber` 自动编号消息
- `Note over` 可添加阶段说明
**消息类型**:
| 语法 | 含义 | 适用场景 |
|------|------|---------|
| `->>` | 实线箭头,同步调用 | 函数调用 |
| `-->>` | 虚线箭头,返回 | 函数返回值 |
| `--)` | 开放箭头,异步 | 委托广播、事件分发 |
| `-x` | 叉号,失败 | 异常、条件不满足 |
---
### 1.4 流程图 / 鲁棒图
使用 `flowchart` 描述复杂接口的决策分支和执行流程。
**语法模板**:
```mermaid
flowchart TD
Start([BeginInteract 被调用]) --> CheckState{当前状态?}
CheckState -->|Free| CheckSelected{是否有选中的可交互物?}
CheckState -->|Interacting| Reject1([返回:已在交互中])
CheckSelected -->|是| SetState[State = Interacting<br/>Phase = Enter]
CheckSelected -->|否| Reject2([返回:无可交互物])
SetState --> TurnAndPush[执行角色转向<br/>执行摄像机推镜]
TurnAndPush --> CheckAnim{需要等待动画?}
CheckAnim -->|是| AnimLock[Phase = AnimLock<br/>等待动画事件]
CheckAnim -->|否| Active[Phase = Active]
AnimLock --> Active
Active --> ExecuteLogic[根据交互类型执行具体逻辑]
ExecuteLogic --> EndFlow([进入 Exit 阶段])
```
**要点**:
- `([...])` 圆角矩形:开始/结束节点
- `{...}` 菱形:判断/分支节点
- `[...]` 矩形:处理/动作节点
- 边上的 `|文字|` 标注分支条件
- 每个分支都要有明确的去向(不允许"悬空"分支)
---
## 2. 项目约定
### 2.1 命名约定
- **类名节点**:使用 UE5 完整类名(`AChildHoodCharacter`、`UInteractionManager`),不缩写
- **模块名节点**:使用中文(`交互管理模块`、`物品数据模块`)
- **时序图参与者**:UE5 类名缩写 + 中文别名(`IM as InteractionManager`)
- **函数/方法**:保留 C++ 命名(`BeginInteract()`),不翻译
- **变量/属性**:使用 UE5 属性名(`bIsInteracting`、`MaxWalkSpeed`)
### 2.2 UE5 特有模式的表示
| UE5 概念 | Mermaid 表示 | 示例 |
|----------|-------------|------|
| Component 挂载 | 组合关系 `*--` | Character `*--` InteractionManager |
| Interface 实现 | 实现关系 `..\|>` | InteractableComponent `..\|>` IChildHoodInteractable |
| Delegate 广播 | 异步消息 `--)` | `OnItemCollected--)` CollectionManager |
| Enhanced Input | 时序图入口 | `Player->>PC: 按 E 键 (IA_Interact)` |
| DataAsset | 聚合关系 `o--` | Manager `o--` ConfigDataAsset |
| Subsystem | 单例节点 | `UGameInstanceSubsystem` 作为独立节点 |
### 2.3 图表复杂度控制
- **功能领域图**:控制在 5-10 个模块节点。超过 10 个考虑拆分子图。
- **类设计图**:聚焦核心类(3-8 个)。辅助类(如 `FVector`、`FRotator` 等 UE 内置类型)不单独列出。
- **时序图**:单张控制在 15-25 条消息。超过 25 条按子流程拆分多张图。
- **流程图**:控制在 10-20 个节点。超过 20 个按子流程拆分。
---
## 3. 复杂度判定启发式
### 3.1 何时需要时序图
时序图为条件性步骤,仅在特性满足以下任一条件时需要绘制:
| 条件 | 判定 | 示例 |
|------|------|------|
| 涉及 3+ 个系统协调 | 需要 | 拾取流程:InteractionManager → ItemManager → CollectionManager |
| 有条件分支或循环流程 | 需要 | 交互流程:根据交互类型走不同子流程 |
| 跨层级通信(UI ↔ 逻辑 ↔ 数据) | 需要 | 提示 UI 显示 → 检测逻辑 → 数据查询 |
| 仅涉及单系统内部配置 | 不需要 | SpringArm 参数调整(纯配置) |
| 仅 2 个系统简单调用 | 可选 | Character 设置 flag → Movement 检查 flag |
### 3.2 何时需要复杂接口描述
复杂接口描述为条件性步骤,仅在接口满足以下任一条件时需要:
| 条件 | 判定 | 示例 |
|------|------|------|
| 5+ 个决策分支 | 需要 | `BeginInteract()`:状态检查 → 选中检查 → 类型分发 → 阶段管理 |
| 协调多个子系统状态 | 需要 | 状态机转换:涉及移动状态、摄像机状态、UI 状态的切换 |
| 有异步等待或回调链 | 需要 | 等待动画事件 → 触发后续逻辑 → 等待推镜完成 |
| 纯数据查询或简单赋值 | 不需要 | `GetInteractableData()`:直接返回成员变量 |
| 2-4 个分支的简单逻辑 | 可选 | `SetInteracting()`:设置 flag + 通知 UI |
### 3.3 项目实际案例参考
**需要时序图的特性**(从现有 `交互系统-技术方案.md` 提取):
- 完整交互流程(Enter → AnimLock → Active → Exit)
- 拾取流程(交互系统 → 物品系统 → 收集系统)
**不需要时序图的特性**(从现有 `玩家控制器-技术方案.md` 提取):
- SpringArm 参数配置(纯构造函数设置)
- CMC 移动参数调整(纯配置)
**需要复杂接口描述的接口**:
- `UInteractionManager::BeginInteract()` — 状态检查 + 子阶段管理 + 摄像机推镜 + 动画等待
- `UInteractionManager::TickComponent()` — 检测更新 + 状态机驱动 + 推镜插值 + UI 更新
**不需要复杂接口描述的接口**:
- `AChildHoodCharacter::DoMove()` — 直接调用 AddMovementInput
- `AChildHoodCharacter::IsInteracting()` — 直接返回 bool