Files
VFSUnity/README.md
T

284 lines
10 KiB
Markdown
Raw Normal View History

# VFSUnity - 运动伤害现场急救处理虚拟仿真实验
2026-06-22 16:37:41 +08:00
基于 Unity 2022.3.62f3c1 (URP) 的体育虚拟仿真教学项目。
2026-06-22 16:37:41 +08:00
## 环境要求
| 工具 | 版本 |
|------|------|
| Unity Editor | **2022.3.62f3c1**(必须一致,建议通过 Unity Hub 安装) |
| Unity Hub | 3.x+ |
| 渲染管线 | Universal Render Pipeline (URP) 14.0.12 |
## 快速开始
### 1. 克隆仓库
```bash
git clone https://git.yangbear.cn/yangbear/VFSUnity.git
2026-06-22 16:37:41 +08:00
```
### 2. 用 Unity Hub 打开
1. 打开 **Unity Hub**
2. 确保已安装 **Unity 2022.3.62f3c1**
2026-06-22 16:37:41 +08:00
3. 点击 **Open** → 选择 clone 下来的 `VFSUnity` 文件夹
4. Unity 自动加载并解析 `Packages/manifest.json` 中的依赖包
2026-06-22 16:37:41 +08:00
### 3. 运行
2026-06-22 16:37:41 +08:00
-**Project** 窗口中双击 `Assets/Scenes/main.unity` 打开主菜单场景
2026-06-22 16:37:41 +08:00
- 点击顶部工具栏的 ▶ **Play** 按钮即可运行
---
2026-06-22 16:37:41 +08:00
## 项目结构
```
VFSUnity/
├── Assets/
│ ├── Scripts/
│ │ ├── Core/ # 核心管理器
│ │ │ ├── GameManager.cs # 全局状态管理(单例)
│ │ │ ├── ExperimentController.cs # 实验流程控制器
│ │ │ └── ConfigLoader.cs # JSON 配置加载器
│ │ ├── Data/ # 数据模型
│ │ │ ├── StepData.cs # 单步定义 ScriptableObject
│ │ │ ├── ExamQuestionData.cs # 考核题目 ScriptableObject
│ │ │ └── ExperimentConfig.cs # 实验配置 ScriptableObject
│ │ ├── Interaction/ # 交互系统
│ │ │ ├── InteractionSystem.cs # 射线检测与点击处理
│ │ │ └── DraggableObject.cs # 拖拽交互组件
│ │ ├── UI/ # UI 控制器
│ │ │ ├── MainMenuUI.cs # 主菜单界面
│ │ │ ├── ModeSelectionUI.cs # 模式选择界面
│ │ │ ├── HUDController.cs # 游戏内 HUD
│ │ │ ├── PopupSystem.cs # 弹窗系统
│ │ │ └── VideoPlayerController.cs # 画中画视频
│ │ └── Animation/
│ │ └── AnimationController.cs # 角色动画控制
│ ├── Scenes/
│ │ ├── main.unity # 主菜单场景 ⭐
│ │ ├── ModeSelection.unity # 模式选择场景
│ │ └── Experiment.unity # 实验场景(核心)
│ ├── Models/
│ │ ├── Characters/ # 角色模型(伤者、施救者)
│ │ ├── Props/ # 道具模型(急救箱、绷带、夹板)
│ │ └── Environment/ # 场景模型(田径馆)
│ ├── Animations/ # 动画文件(待导入)
│ ├── Prefabs/ # 预制体
│ ├── Materials/ # 材质
│ ├── Textures/ # 贴图
│ │ └── UI/ # UI 贴图
│ ├── Audio/ # 音频文件(语音解说)
│ ├── Video/ # 视频文件(真人演示)
│ └── Resources/
│ └── Data/
│ ├── fracture_fixation_steps.json # 肢体固定步骤配置
│ └── splint_fixation_steps.json # 夹板固定步骤配置
├── Packages/ # Unity 包依赖清单
├── ProjectSettings/ # 项目全局设置
2026-06-22 16:37:41 +08:00
└── README.md
```
---
## 🏗 架构设计
### 核心流程
```
MainMenu (scene: main.unity)
│ 选择实验类型(骨折固定/心肺复苏/...)
ModeSelection (scene: ModeSelection.unity)
│ 选择固定方式 + 运行模式
Experiment (scene: Experiment.unity)
│ GameManager(全局状态)
│ ExperimentController(步骤控制)
│ InteractionSystem(点击检测)
│ HUD(顶部提示栏 + 右侧按钮 + 进度条)
│ PopupSystem(弹窗 + 考核题 + 成绩显示)
│ VideoPlayer(画中画,学习模式)
```
### 状态管理
| 类 | 职责 |
|----|------|
| **GameManager** | 全局单例。管理实验类型、固定方式、运行模式、当前步骤、分数、考核结果 |
| **ExperimentController** | 接收用户交互事件,验证步骤完成条件,推进实验流程 |
| **InteractionSystem** | 处理鼠标射线检测,区分 UI 点击和 3D 物体点击 |
| **ConfigLoader** | 从 `Resources/Data/*.json` 加载实验步骤和考核题目数据 |
### 数据模型
| 类 | 说明 |
|----|------|
| **StepData** (ScriptableObject) | 定义单个步骤:提示文案、对话文案、交互类型、目标标签 |
| **ExamQuestionData** (ScriptableObject) | 定义考核题目:题目文案、选项、正确答案、反馈文案 |
| **ExperimentConfig** (ScriptableObject) | 实验配置容器:步骤列表 + 考核题目列表 + 固位方式 + 分数设置 |
---
## 🎮 场景说明
### 1. 主菜单场景 (`main.unity`)
- 主标题:"运动伤害现场急救处理虚拟仿真实验"
- 底部 5 个功能图标按钮:心肺复苏 | 骨折固定 | 扭伤包扎 | 出血包扎 | 伤员搬运
- 点击按钮 → 跳转 `ModeSelection` 场景
### 2. 模式选择场景 (`ModeSelection.unity`)
- 顶部提示:Tip:请选择实验模式
- 固定方式选项:肢体固定 | 夹板固定
- 运行模式选项:学习模式 | 考核模式
- 底部:开始实验 | 返回主菜单
### 3. 实验场景 (`Experiment.unity`)
**场景物体:**
| 物体 | 标签 | 说明 |
|------|------|------|
| Ground | - | 地板(Plane 10x10 |
| InjuredPerson | InjuredPerson | 伤者(占位 Capsule |
| InjuryLeg | InjuryLeg | 伤腿交互区(Sphere,伤者子物体) |
| Rescuer | Rescuer | 施救者(占位 Capsule |
| Shoe | Shoe | 鞋子(可点击交互) |
| Bandage | Bandage | 绷带(拖拽交互) |
| Splint | Splint | 夹板(拖拽交互) |
| FirstAidKit | FirstAidKit | 急救箱 |
**UI 层:**
| 组件 | 说明 |
|------|------|
| TipBar | 顶部提示栏(学习模式显示) |
| DialogueBubble | 角色对话气泡(自动4秒消失) |
| ProgressSlider | 底部进度条 |
| 右侧按钮 | 全屏、上一步、下一步、学习/考核切换、返回 |
| VideoPanel | 右下角画中画视频(学习模式特定步骤激活) |
| PopupSystem | 弹窗系统(考核题、成绩显示、注意事项) |
---
## 📝 骨折固定实验流程(学习模式)
| 步骤 | Tip 提示 | 交互方式 | 目标标签 |
|------|----------|----------|----------|
| 0. 环境评估 | 观察周围环境是否有危险,做好防护措施 | 按钮确认 | - |
| 1. 伤情检查 | 请检查伤员受伤位置 | 点击物体 | InjuryLeg |
| 2. 脱鞋袜检查 | 请将伤员鞋袜脱掉并保存好 | 点击物体 | Shoe |
| 3. 放置衬带 | 请在正确的位置穿宽度约10cm的带子 | 拖拽交互 | Bandage |
| 4. 肢体并拢 | 请在两下肢间加衬垫 | 按钮确认 | - |
| 5. 主干固定 | 固定骨折近心端、远心端、膝关节下 | 拖拽交互 | Bandage |
| 6. 踝关节固定 | 踝关节"8"字固定 | 拖拽交互 | Bandage |
| 7. 终末检查 | 包扎完毕请检查伤肢血液循环 | 按钮确认 | - |
## 📝 考核模式题目
| 考核点 | 题目 | 选项 | 正确答案 |
|--------|------|------|----------|
| 考核点一 | 按正确顺序进行环境评估与自我介绍 | 确定 | - |
| 考核点二 | 按正确顺序检查伤情 | 确定 | - |
| 考核点三 | 请选择合适的带子宽度 | 5cm / 10cm / 20cm | 10cm |
| 考核点四 | 请选择正确的放带子顺序 | 确定(交互排序) | - |
| 考核点五 | 请选择正确的系带子顺序 | 确定(交互排序) | - |
| 考核点六 | 请选择带子打结位置 | 确定(点击目标) | - |
| 考核点七 | 请选择踝关节打结位置 | 足底 / 足背 | 足背 |
---
## 🔧 交互类型枚举
| 类型 | 值 | 说明 |
|------|-----|------|
| None | 0 | 无交互 |
| ClickObject | 1 | 点击3D物体(需匹配 targetTag |
| ClickGround | 2 | 点击地面空白处 |
| DragDrop | 3 | 拖拽物体到目标位置 |
| ButtonConfirm | 4 | 点击 UI 按钮确认 |
| MultipleChoice | 5 | 选择选项(考核模式) |
---
## 📦 待添加资源清单
### 3D 模型
- [ ] 室内田径馆场景(跑道、看台、跳高架、跳高垫)
- [ ] 伤者角色模型(男性、运动装、骨骼绑定)
- [ ] 施救者角色模型(女性、急救员装束、骨骼绑定)
- [ ] 急救箱(带红十字)
- [ ] 绷带/三角巾
- [ ] 夹板模型
- [ ] 鞋子/袜子模型
### 动画
- [ ] 伤者:跑步循环、跳高起跳、空中姿态、落地摔倒、躺地受伤
- [ ] 施救者:站立、蹲下、检查、脱鞋、包扎手部特写
- [ ] 推荐使用 Mixamo 获取基础动画或动捕制作
### 音频
- [ ] 背景音乐
- [ ] 语音解说 TTS
### 视频
- [ ] 真人演示视频(画中画,学习模式使用)
### UI 素材
- [ ] 5 个主功能图标
- [ ] 按钮样式
- [ ] 背景图
---
## 🚀 后续开发指南
### 添加新实验类型
1. 创建新的 `Resources/Data/xxx_steps.json` 配置
2.`MainMenuUI.cs` 中添加按钮监听
3.`ConfigLoader.cs` 中添加加载方法
### 替换占位模型
1. 导入真实模型到 `Assets/Models/` 对应子目录
2. 在 Experiment 场景中替换 Capsule/Cube 占位物
3. 确保各物体的 Tag 和 Collider 设置正确
### 添加真实动画
1. 导入动画到 `Assets/Animations/`
2. 为角色创建 Animator Controller
3.`AnimationController.cs` 中关联 Animator 引用和状态名
### 部署 MCP for Unity(可选)
在 Unity 中:**Window → Package Manager → + → Add package from git URL**,粘贴:
```
https://github.com/CoplayDev/unity-mcp.git?path=/MCPForUnity#main
```
然后 **Window → MCP for Unity → Configure All Detected Clients**
---
2026-06-22 16:37:41 +08:00
## 依赖包
核心依赖已在 `Packages/manifest.json` 中锁定版本:
2026-06-22 16:37:41 +08:00
- **Universal RP** 14.0.12 — 渲染管线
- **TextMeshPro** 3.0.7 — 文字渲染
- **Timeline** 1.7.7 — 过场动画
- **UGUI** 1.0.0 — UI 系统
---
2026-06-22 16:37:41 +08:00
## 注意事项
- **不要删除 `.meta` 文件** — Unity 用它们追踪资源和 GUID
- `.gitignore` 已配置忽略 Library、Temp、Logs、UserSettings 等生成目录
- 占位模型 (Capsule/Cube) 后续需替换为真实美术资源
- 考核判分逻辑在 `GameManager.RecordExamAnswer()` 中实现
- 步骤配置通过 `Resources/Data/*.json` 管理,可在 Unity 外编辑