Add hand visualization and recording/playback system for single player mode#2
Conversation
…r mode Co-authored-by: wuzhi456 <217564920+wuzhi456@users.noreply.github.com>
…tation Co-authored-by: wuzhi456 <217564920+wuzhi456@users.noreply.github.com>
|
@copilot 现在我想要知道为了测试你的改动是否有效,我需要用xcode运行哪一个项目文件 |
您需要用 Xcode 打开 HappyBeam.xcodeproj 项目来测试这些改动。所有的更改都在 HappyBeam 项目中,包括:
运行后,在开始界面点击 "Play Solo" 会显示三个选项:Normal Play(正常游玩)、Recording Mode(录制模式)、Playback Mode(回放模式)。 |
|
@copilot 手部数据会被存储什么格式的文件 |
手部数据存储为 JSON 格式文件,文件名按日期时间命名,格式为: 例如: 文件存储在应用的 Documents 目录中。数据结构如下: {
"version": 1,
"createdAt": "2025-12-10T15:30:42Z",
"frames": [
{
"timestamp": 0.0,
"leftJoints": [
{"name": "wrist", "position": [x, y, z], "orientation": [x, y, z, w]},
{"name": "thumbKnuckle", "position": [...], "orientation": [...]}
// ... 其他关节
],
"rightJoints": [...]
}
]
}每个 frame 包含时间戳和左右手所有关节的位置/旋转信息。 |
|
@copilot 现在我在本地运行时报编译错误,gamemodel中找不到HandPoseRecording |
这个错误是因为新创建的 Swift 文件没有被自动添加到 Xcode 项目中。您需要手动将以下三个新文件添加到 HappyBeam 项目:
添加完成后重新编译项目即可解决这个错误。 |
|
@copilot 现在handvisulization里有两处 let material = SimpleMaterial(color: SimpleMaterial.Color(Color(uiColor: jointColor)), roughness: 0.15, isMetallic: false)会报找不到'Color' |
Co-authored-by: wuzhi456 <217564920+wuzhi456@users.noreply.github.com>
已修复。问题是使用了 SwiftUI 的 修复提交: |
|
@copilot 我现在不知道如果记录模式下成功记录下手部数据,对应的json文件存在哪里 |
JSON 文件存储在应用的 Documents 目录中。具体路径取决于运行环境: 在 Vision Pro 真机上:
在模拟器上:
查看保存状态: |
|
@copilot 现在Select Recording" 标题 |
…ing and debug logs Co-authored-by: wuzhi456 <217564920+wuzhi456@users.noreply.github.com>
已修复。问题可能是 SwiftUI 的按钮在 VisionOS 上渲染问题。我做了以下更改:
请重新测试,现在录制文件按钮应该有蓝色背景,更容易看到和点击。 修复提交: |
|
@copilot if savedRecordings.isEmpty { |
…nOS interaction Co-authored-by: wuzhi456 <217564920+wuzhi456@users.noreply.github.com>
已修复两个问题: 1. 按钮堆叠问题
2. 按钮无响应问题
请重新测试,按钮现在应该:
点击按钮时控制台应输出 修复提交: |
|
@copilot 我觉得你可以把手部数据json文件存储位置改成该项目文件夹下一个专门用来存手部数据的文件夹 |
关于存储位置的说明: 在 iOS/visionOS 上,应用只能写入自己的沙盒目录(如 Documents),无法写入项目文件夹(项目文件夹在您的 Mac 上,而应用运行在 Vision Pro 设备上)。 当前方案:文件存储在应用的 可以改进的方案:
您是希望我创建一个专门的子文件夹来组织这些录制文件吗?例如:
这样可以让录制文件更有组织,也更容易管理。 |
|
@copilot 现在playback成功了但是发现之前记录的手部数据中一旦某些关节被遮挡,手部模型会部分缺失,有没有什么办法,可以预测或者补全被遮挡关节;除此之外,我希望在recording mode下,球棍模型不应该被用户的手挡住,不然调试的时候看不到关节是否都绑对了 |
…ion for missing joints Co-authored-by: wuzhi456 <217564920+wuzhi456@users.noreply.github.com>
已修复两个问题: 1. 遮挡关节补全
2. Recording 模式下可视化不被手遮挡
修复提交: |
|
@copilot 我现在需要增加一个删除之前的记录的手部数据json文件的功能 |
Co-authored-by: wuzhi456 <217564920+wuzhi456@users.noreply.github.com>
已添加删除功能。现在每个录制文件旁边都有一个红色垃圾桶按钮:
修复提交: |
|
@copilot 我现在想修改一下UI,告诉我每个界面的ui对应的控制代码在哪里就行 |
UI 控制代码位置如下: 主要界面文件:
手部可视化相关:
状态管理:
|
Implements hand joint visualization (spheres for joints, cylinders for bones) with three game modes: normal play, recording mode (captures hand data), and playback mode (replays recorded hand data as a guide).
Changes
New Files
HandJointPose,HandPoseFrame,HandPoseRecording) with bone connection definitionsHandPose_YYYYMMDD_HHmmss.json)Modified Files
SoloGameModeenum (.normal,.recording,.playback) andplaybackRecordingstateFeatures
.borderedbuttonStyle for proper visionOS eye-tracking and hand interactionrenderOnTopmode for recording visualization: spheres/cylinders now render on top of user's hands for easier debuggingOriginal prompt
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.