数据保存老方法
目前的传输框架与“患者运动学数据保存到 CSV”的完整链路如下(基于代码检索):
传输框架(当前实现)
- 使用 Mirror 网络框架,底层 KCP Transport(UDP)。KCP 端口默认
7777、NoDelay、Interval=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 软件迭代更新
我选择的技术路线是
- 在Unity中配置Cursor
- 使用MCP进行配置
第一步:安装Unity包(桥接器)
- 打开你的Unity项目。
- 转到
Window > Package Manager。
- 点击
+->Add package from git URL...。
- 输入:
- 点击
Add。
- MCP服务器应该会在此过程中自动安装到你的机器上。
第二步:配置你的MCP客户端
将你的MCP客户端(Claude、Cursor等)连接到你在第一步中安装的Python服务器。
选项A:自动配置(推荐用于Claude/Cursor/VSC Copilot)
- 在Unity中,转到
Window > Unity MCP。
- 点击你使用的IDE上的
Auto Configure。
- 寻找绿色状态指示器 🟢 和“已连接”。(这将尝试自动修改MCP客户端的配置文件)。
选项B:手动配置
如果自动配置失败或你使用不同的客户端:
- 找到你的MCP客户端的配置文件。(查看客户端文档)。
- Claude 示例(macOS):
~/Library/Application Support/Claude/claude_desktop_config.json - Claude 示例(Windows):
%APPDATA%\Claude\claude_desktop_config.json
- 编辑文件 以添加/更新
mcpServers部分,使用第一步中的确切路径。
点击查看操作系统特定的JSON配置片段...





使用 ▶️
- 打开你的Unity项目。 Unity MCP桥接器(包)应该会自动连接。通过
Window > Unity MCP检查状态。
- 启动你的MCP客户端(Claude、Cursor等)。它应该会自动启动Unity MCP服务器(Python),使用安装步骤3中的配置。
- 开始交互! Unity工具现在应该可以在你的MCP客户端中使用。
示例提示:
创建一个3D玩家控制器,创建一个黄色的太阳和桥梁,创建一个酷炫的着色器并将其应用到立方体上。📋 功能概述
本功能实现了在用户评估每个动作时自动播放对应的语音提示,帮助用户更好地理解当前需要执行的动作。
🎯 实现的功能
- ✅ 创建了
VoiceManager语音管理器
- ✅ 在
AssessController中集成了语音播放
- ✅ 支持动作名称到语音文件的映射配置
- ✅ 在开始评估、切换动作、重播动作时自动播放语音
📝 详细操作流程
第一步:准备语音文件
- 创建音频文件夹
- 在 Unity 编辑器中,找到
Assets文件夹 - 右键点击
Assets→Create→Folder - 命名为
Resources - 在
Resources文件夹内创建子文件夹Audio - 最终路径:
Assets/Resources/Audio/
- 导入语音文件
- 将准备好的语音文件(支持格式:
.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
- 在场景中添加 VoiceManager
- 打开主场景
Assets/Scenes/App.unity - 在 Hierarchy 面板中,找到场景根节点或创建一个空 GameObject
- 选中该 GameObject,在 Inspector 面板点击
Add Component - 搜索并添加
VoiceManager组件
- 配置动作-语音映射
- 选中带有
VoiceManager组件的 GameObject - 在 Inspector 面板中找到
Voice Manager组件 - 展开
Action Voice Mappings列表 - 点击
+按钮添加映射项 - 为每个动作配置:
- Action Name: 输入动作名称(必须与动画名称完全一致)
- Voice File Name: 输入语音文件名(不包含扩展名,例如:
握拳而不是握拳.mp3)
示例配置:
第三步:验证配置
- 检查代码集成
- 代码已经自动集成到以下位置:
AssessController.StartAssess()- 开始评估时播放第一个动作的语音AssessController.TryTurnNextAction()- 切换动作时播放新动作的语音AssessController.StopAssess()- 停止评估时停止语音播放AnimationController.PlayAgain()- 重播动作时播放语音
- 测试语音播放
- 运行场景
- 开始评估流程
- 验证每个动作切换时是否正确播放对应的语音
🔧 高级配置
动态添加映射(运行时)
如果需要运行时动态添加动作-语音映射,可以使用以下代码:
语音播放控制
语音音量设置
语音音量由
AudioKit.Settings.VoiceVolume 控制,可以在代码中设置:📁 文件结构
⚠️ 注意事项
- 文件路径要求
- 语音文件必须放在
Assets/Resources/Audio/目录下 - 文件名配置时不需要包含扩展名
- 动作名称匹配
Action Name必须与动画名称完全一致(区分大小写)- 建议在配置前先查看
AnimationController中的动画名称列表
- 语音文件格式
- 推荐使用
.mp3或.wav格式 - 文件大小建议控制在合理范围内(避免过大影响加载速度)
- 语音播放时机
- 语音会在动作切换时立即播放
- 如果上一个语音还在播放,会被新语音中断
- 停止评估时会自动停止所有语音播放
🐛 故障排除
问题1:语音不播放
- 检查项:
- 确认语音文件已正确放置在
Assets/Resources/Audio/目录 - 确认
VoiceManager组件已添加到场景中 - 确认动作名称与配置的
Action Name完全一致 - 检查 Console 面板是否有错误信息
问题2:播放错误的语音
- 检查项:
- 确认
Action Voice Mappings中的动作名称配置正确 - 确认
Voice File Name与实际的语音文件名匹配(不含扩展名)
问题3:语音音量太小或太大
- 解决方法:
- 在代码中调整
AudioKit.Settings.VoiceVolume.Value - 或在 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 组件配置了所有动作的语音映射
测试了语音播放功能
验证了动作切换时的语音播放
确认了停止评估时语音正确停止
完成以上步骤后,语音播放功能即可正常使用! 🎉
语音生成网站MiniMax 语音:让文字栩栩如"声"
相关文章









