数据保存老方法

目前的传输框架与“患者运动学数据保存到 CSV”的完整链路如下(基于代码检索):

传输框架(当前实现)

  • 使用 Mirror 网络框架,底层 KCP Transport(UDP)。KCP 端口默认 7777NoDelayInterval=10 等配置在 KcpTransport 中可见。

运动学数据→CSV 的保存流程

1) 用户端采集运动学帧数据(100Hz)

  • AssessController_recordRate = 100 的节奏里调用 SaveFrameData(),采集上臂/小臂追踪器、骨骼、手部关节等数据,封装为 AssessmentFrameSaveData,序列化为 JSON。

2) 网络传输(Mirror Command)

  • 用户端调用 SendFrameSaveData(json)CmdSendFrameSaveData(Mirror Command)→ 医生端触发事件 OnReceiveFrameSaveDataEvent

3) 医生端接收并写入 CSV

  • UIAssessPanel.OnReceiveFrameSaveData 收到 JSON 后交给 AssessController.AddFrameSaveData
  • AssessController.AddFrameSaveData 反序列化并调用 SaveData,在医生端本地写 CSV。
  • CSV 目录与文件命名规则在 SetActionQueueActionNameList 中设置:
  • CSV 表头在 CreateActionSaveFile,包含上臂/小臂追踪器与骨骼姿态以及手部关节(排除指尖)。

简明链路图(数据 → CSV)

如果你需要我把 “数据传输框架”的具体入口(如 AppNetworkManager / NetworkManager 的配置)CSV 的字段格式/具体数值写法 再细化到更具体的调用点,我可以继续帮你梳理。

MCP开发历程

1 软件迭代更新

我选择的技术路线是
  1. 在Unity中配置Cursor
  1. 使用MCP进行配置

第一步:安装Unity包(桥接器)

  1. 打开你的Unity项目。
  1. 转到 Window > Package Manager
  1. 点击 + -> Add package from git URL...
  1. 输入:
    1. 点击 Add
    1. MCP服务器应该会在此过程中自动安装到你的机器上。

    第二步:配置你的MCP客户端

    将你的MCP客户端(Claude、Cursor等)连接到你在第一步中安装的Python服务器。
    选项A:自动配置(推荐用于Claude/Cursor/VSC Copilot)
    1. 在Unity中,转到 Window > Unity MCP
    1. 点击你使用的IDE上的 Auto Configure
    1. 寻找绿色状态指示器 🟢 和“已连接”。(这将尝试自动修改MCP客户端的配置文件)
    选项B:手动配置
    如果自动配置失败或你使用不同的客户端:
    1. 找到你的MCP客户端的配置文件。(查看客户端文档)。
        • Claude 示例(macOS): ~/Library/Application Support/Claude/claude_desktop_config.json
        • Claude 示例(Windows): %APPDATA%\Claude\claude_desktop_config.json
    1. 编辑文件 以添加/更新 mcpServers 部分,使用第一步中的确切路径。
     
    点击查看操作系统特定的JSON配置片段...
    notion image
    notion image
    notion image
    notion image
    notion image
     

    使用 ▶️

    1. 打开你的Unity项目。 Unity MCP桥接器(包)应该会自动连接。通过 Window > Unity MCP 检查状态。
    1. 启动你的MCP客户端(Claude、Cursor等)。它应该会自动启动Unity MCP服务器(Python),使用安装步骤3中的配置。
    1. 开始交互! Unity工具现在应该可以在你的MCP客户端中使用。
      1. 示例提示:创建一个3D玩家控制器创建一个黄色的太阳和桥梁创建一个酷炫的着色器并将其应用到立方体上

    📋 功能概述

    本功能实现了在用户评估每个动作时自动播放对应的语音提示,帮助用户更好地理解当前需要执行的动作。

    🎯 实现的功能

    1. ✅ 创建了 VoiceManager 语音管理器
    1. ✅ 在 AssessController 中集成了语音播放
    1. ✅ 支持动作名称到语音文件的映射配置
    1. ✅ 在开始评估、切换动作、重播动作时自动播放语音

    📝 详细操作流程

    第一步:准备语音文件

    1. 创建音频文件夹
        • 在 Unity 编辑器中,找到 Assets 文件夹
        • 右键点击 AssetsCreateFolder
        • 命名为 Resources
        • Resources 文件夹内创建子文件夹 Audio
        • 最终路径:Assets/Resources/Audio/
    1. 导入语音文件
        • 将准备好的语音文件(支持格式:.mp3, .wav, .ogg)复制到 Assets/Resources/Audio/ 文件夹
        • 语音文件命名建议:
          • 使用动作名称作为文件名(例如:握拳.mp3
          • 或者使用有意义的名称(例如:action_01.mp3
        • 在 Unity 中,选中语音文件,在 Inspector 面板中设置:
          • Load Type: Decompress On Load(推荐)或 Compressed In Memory
          • Compression Format: PCM(最佳音质)或 Vorbis(较小文件)

    第二步:配置 VoiceManager

    1. 在场景中添加 VoiceManager
        • 打开主场景 Assets/Scenes/App.unity
        • 在 Hierarchy 面板中,找到场景根节点或创建一个空 GameObject
        • 选中该 GameObject,在 Inspector 面板点击 Add Component
        • 搜索并添加 VoiceManager 组件
    1. 配置动作-语音映射
        • 选中带有 VoiceManager 组件的 GameObject
        • 在 Inspector 面板中找到 Voice Manager 组件
        • 展开 Action Voice Mappings 列表
        • 点击 + 按钮添加映射项
        • 为每个动作配置:
          • Action Name: 输入动作名称(必须与动画名称完全一致)
          • Voice File Name: 输入语音文件名(不包含扩展名,例如:握拳 而不是 握拳.mp3
        示例配置:

    第三步:验证配置

    1. 检查代码集成
        • 代码已经自动集成到以下位置:
          • AssessController.StartAssess() - 开始评估时播放第一个动作的语音
          • AssessController.TryTurnNextAction() - 切换动作时播放新动作的语音
          • AssessController.StopAssess() - 停止评估时停止语音播放
          • AnimationController.PlayAgain() - 重播动作时播放语音
    1. 测试语音播放
        • 运行场景
        • 开始评估流程
        • 验证每个动作切换时是否正确播放对应的语音

    🔧 高级配置

    动态添加映射(运行时)

    如果需要运行时动态添加动作-语音映射,可以使用以下代码:

    语音播放控制

    语音音量设置

    语音音量由 AudioKit.Settings.VoiceVolume 控制,可以在代码中设置:

    📁 文件结构

    ⚠️ 注意事项

    1. 文件路径要求
        • 语音文件必须放在 Assets/Resources/Audio/ 目录下
        • 文件名配置时不需要包含扩展名
    1. 动作名称匹配
        • Action Name 必须与动画名称完全一致(区分大小写)
        • 建议在配置前先查看 AnimationController 中的动画名称列表
    1. 语音文件格式
        • 推荐使用 .mp3.wav 格式
        • 文件大小建议控制在合理范围内(避免过大影响加载速度)
    1. 语音播放时机
        • 语音会在动作切换时立即播放
        • 如果上一个语音还在播放,会被新语音中断
        • 停止评估时会自动停止所有语音播放

    🐛 故障排除

    问题1:语音不播放

    • 检查项:
        1. 确认语音文件已正确放置在 Assets/Resources/Audio/ 目录
        1. 确认 VoiceManager 组件已添加到场景中
        1. 确认动作名称与配置的 Action Name 完全一致
        1. 检查 Console 面板是否有错误信息

    问题2:播放错误的语音

    • 检查项:
        1. 确认 Action Voice Mappings 中的动作名称配置正确
        1. 确认 Voice File Name 与实际的语音文件名匹配(不含扩展名)

    问题3:语音音量太小或太大

    • 解决方法:
        1. 在代码中调整 AudioKit.Settings.VoiceVolume.Value
        1. 或在 Unity 的 Audio Settings 中调整主音量

    📚 相关代码文件

    • Assets/Scripts/CuZhong/Runtime/Controller/VoiceManager.cs - 语音管理器
    • Assets/Scripts/CuZhong/Runtime/Controller/AssessController.cs - 评估控制器
    • Assets/Scripts/CuZhong/Runtime/Controller/AnimationController.cs - 动画控制器
    • Assets/Scripts/Framework/Audio/AudioKit.cs - 音频系统

    ✅ 完成检查清单

    创建了 Resources/Audio 文件夹
    导入了所有需要的语音文件
    在场景中添加了 VoiceManager 组件
    配置了所有动作的语音映射
    测试了语音播放功能
    验证了动作切换时的语音播放
    确认了停止评估时语音正确停止

    完成以上步骤后,语音播放功能即可正常使用! 🎉
    制作一个自律软件云朵为什么边缘锐利
    Loading...