type
Post
status
Published
date
Mar 8, 2026
slug
summary
tags
开发
category
技术分享
icon
password

一、项目概述

1.1 项目背景

On the Beat:一款为ADHD 英语学习者打造的音乐游戏,将传统音乐节奏游戏与沉浸式AR体验相结合。玩家通过Rokid眼镜的手部追踪功能,在虚拟场景中与流动的歌词互动,通过准确的拍打手势击中音符,体验身临其境的音乐游戏。
作为一个学生作品,我和团队小伙伴打磨了将近两个月。我们团队都是初学者,但所幸Rokid的SDK非常强大,开发者社区的相关资料也很多,加上新时代AI的赋能,都帮助我们0基础上手。最后能收获到官方和孩子们的喜欢真的非常荣幸!!!
870f787ab72c0469c3e9c95d346f1f65.jpg
dc99453e974582452eb819b3a7d4e69c.jpg

1.2 核心玩法

节奏判定:根据歌曲节拍,系统在特定时间点生成音符
手势识别:通过Rokid XR手部追踪,识别玩家的拍打、挥手等手势
实时反馈:立即显示判定等级(Perfect/Good/Miss)和得分
点歌体验:支持多首歌曲,可切换选择
歌词展示:歌词同步滚动,逐字变色跟随音乐进度

1.3 技术栈

引擎:Unity 2022+
AR框架:Rokid UXR SDK
核心技术:实时音频处理、手部碰撞检测、精确时间判定、动态UI渲染

二、整体架构设计

| 输入模块 | 手部识别、手势检测、碰撞触发 | `RokidHandCollisionDetector.cs` |
| 游戏逻辑 | 音符管理、输入处理、游戏状态 | `RhythmGameManager.cs` |
| 判定系统 | 时间计算、精确判定、结果评级 | `JudgmentSystem.cs` |
| 评分系统| 得分计算、数据统计、结果聚合 | `ScoreManager.cs`、`ScoreData.cs` |
|显示层 | UI渲染、歌词同步、视觉反馈 | `LyricScroller.cs`、`DJ.cs` |

三、核心难点与实现方案

难点 1:AR环境下的实时手部碰撞检测

问题背景:Rokid XR设备的手部追踪在AR空间中存在以下挑战:
  • 手部追踪数据有延迟(通常10-30ms)
  • 空间定位误差(±5-10cm)
  • 快速运动时的轨迹丢失
  • 复杂手势识别的误判
传统的碰撞盒检测在AR场景中容易误触发或完全不触发。
解决方案:采用分层碰撞检测机制,结合距离判定和时间冷却:
关键技术点
1. 距离权重计算:不仅检测碰撞,还计算距离作为置信度
2. 排他性检测:确保只有最近的按钮被触发,避免邻近误触
3. 冷却机制:防止抖动导致的多次触发(50ms间隔)
4. 手部追踪集成:直接从Rokid XR SDK获取实时手部位置

难点 2:音频时间同步与精确节奏判定

问题背景:节奏游戏的核心在于精确度。常见问题:
  • 音频播放时刻与游戏逻辑不同步
  • 不同平台的音频延迟差异(5-50ms)
  • 判定窗口设定不合理导致体验差
  • 浮点精度问题累积误差
解决方案:实现多层时间同步机制自适应判定窗口
关键技术点
1. 双精度时间戳:使用float精度足够,但要避免舍入误差
2. 范围搜索:不是逐个比对所有音符,而是在时间窗口内搜索
3. 最近音符匹配:在多个可能音符中选择时间最接近的
4. 判定容错:通过合理的窗口大小(Perfect ±300ms)平衡游戏难度

难点 3:动态歌词渲染与逐字同步高亮

问题背景:高质量的卡拉OK体验需要:
  • 歌词与音乐精确同步(误差<100ms)
  • 逐字变色跟随播放进度
  • 支持多种语言和特殊标记(重读音、连接音等)
  • 高性能UI更新(每帧可能需要更新多个文本)
  • TextMesh Pro的富文本标签动态生成
15.png
10.png
解决方案:采用分层高亮系统增量更新优化
关键技术点
1. 逐字时间映射:将行级时间映射到字级,支持精确同步
2. 增量更新:每帧只更新变化的部分(虽然这里简化为全文重建,实际可优化)
3. 富文本标签动态生成:使用TextMesh Pro的标签系统实现多样化效果
4. 性能缓存:缓存颜色值避免重复转换
5. 标记系统:支持多种视觉标记(重读音下划线、连接音背景等)

难点 4:多输入类型的灵活处理架构

问题背景:AR游戏需要支持多种输入:
  • 手部手势(拍打、握拳等)
  • 语音输入(某些歌曲行可能用语音判定)
  • 控制器按键(备用输入)
  • 各种输入的延迟和误判率不同
  • 需要灵活切换或组合输入方式
解决方案:采用策略模式 + 工厂模式的输入系统设计:
关键设计模式:
1. 策略模式:每种输入类型都有独立的处理策略
2. 工厂模式:统一创建输入处理器,便于扩展
3. 灵活切换:运行时动态注册/注销输入处理器
4. 多输入支持:可同时启用多种输入方式

四、性能优化与最佳实践

4.1 CPU优化

  • 对象池:复用歌词文本容器和UI元素,减少GC压力
  • 范围查询优化:使用哈希表预处理音符,避免逐帧全表遍历
  • 冷却机制:防止高频触发导致的重复计算

4.2 内存优化

  • 分离数据和表现:歌词时序数据独立存储,UI组件只负责渲染
  • 缓存机制:缓存颜色值、富文本标签等频繁使用的对象

4.3 网络与同步

  • 考虑多人模式时,使用时间戳同步而非帧同步
  • 使用差分同步减少网络带宽占用

五、总结与展望

On the Beat通过精确的时间判定、实时的手部追踪和动态的歌词渲染,为用户创造了沉浸式的音乐游戏体验。项目中的多个技术方案(分层碰撞检测、自适应时间窗口、动态字高亮等)可以作为其他AR音乐类应用的参考。

六、后续优化方向

1. AI难度调整:根据玩家表现动态调整判定窗口
2. 多人在线:实现联网对战、合作模式
3. 歌曲编辑器:让用户自定义歌曲和音符
4. 社区分享:用户可上传自己的成绩和视频

参考资源

  • Rokid UXR SDK 文档
  • Unity TextMesh Pro 富文本指南
  • 节奏游戏设计最佳实践
人本视角下大语言模型代码生成中的歧义重构示例文章
Loading...