缺陷:SceneRuntime._compute_aabb() 用 MeshInstance3D.global_transform 计算包围盒, 而它在 _assemble() 里调用 —— 那时运行时节点**还没入树**。两个后果: - Godot 打一行 `ERROR: Condition "!is_inside_tree()" is true. Returning: Transform3D()` (真机每次载入场景都刷一条,与"日志里不应有 ERROR"的排查约定冲突); - 树外的 global_transform 返回单位变换,算出来的只是各网格的**局部** AABB, 于是重力/风 Area3D 的碰撞盒与兜底地面会偏小或偏位 —— 对把网格摆在非原点位置的 场景(导出 GLB 的常见情况)**风力可能作用不到物体上**。 修复:改为从根往下累乘 `Node3D.transform`,不依赖是否入树;挂在单位变换父节点下时 结果与旧语义一致。 新增 21 项无头"真机等价"测试(不需要设备): - tests/test_scene_config.gd:在代码里手写合法 GLB(三角形 + BIN chunk)落盘后 **真实加载**:warnings 为空、按 colliders 三种取值分别核对碰撞体(mesh / auto 命中 *_col / auto 未命中的兜底地面 / none)、重力 Area3D 的 gravity 与方向、 SPACE_OVERRIDE_REPLACE、风力与 WIND_FORCE_SCALE 对齐,以及**带位移网格** (translation [10,0,0])时重力区域与兜底地面都跟着位移(该缺陷的回归测试); - tests/test_pose_server.gd:**时间维度**验证保活 —— 只发应用层 ping、不发关键点帧的 客户端在 17 秒(> 15 秒静默超时)后仍保持连接("画面里没人就掉线、疯狂重连"的根因 对照),而完全不发数据的客户端被 close(1001) 断开。 新增 build/check-version.sh:强制 project.godot 的 application/config/version (「关于」清单与 .pck 的来源)与 project.yaml、发布版本号三者一致;已接入 build/package-release.sh(打包前)与 build/verify.sh(第 0/4 步),并做过反向验证。 此前没有任何机制保证这两个文件同步 —— 界面显示的版本可能和产物名不一致。 版本升至 0.2.1(project.godot / project.yaml / README / 产物名 / tag 全部一致), About 清单与 .pck 内版本号均为 0.2.1(已用 strings 核对)。 验证:build/verify.sh 四步全通过(版本一致性 → 编译 → 751 项断言 → 180 帧启动无错误); 产物 opendance-windows-v0.2.1.zip(LZMA,26,627,191 B) sha256 d49885327047f5a52de6c732431ea080cd1a030ae1c581a8bc0ec0d99bfb792c。
107 lines
3.2 KiB
YAML
107 lines
3.2 KiB
YAML
project: opendance-windows-client
|
||
version: 0.2.1
|
||
repository: opendance-windows
|
||
default_branch: main
|
||
engine: Godot 4.7.2
|
||
contracts_version:
|
||
rest-api: 0.5.0
|
||
websocket-keypoints: 0.2.0
|
||
data-models: 0.7.0
|
||
skeleton-topology: 0.2.0
|
||
model-formats: 0.5.0
|
||
database: 0.4.0
|
||
|
||
# 契约变更流程(文档 7.2):
|
||
# 任何跨端契约变更必须先在 opendance-web 修改 contracts/ 并提升版本,
|
||
# 再在本项目创建适配任务。本项目内的 contracts/ 只是只读快照。
|
||
|
||
dependencies:
|
||
- name: opendance-web
|
||
kind: rest-api
|
||
contract: contracts/rest-api.yaml
|
||
usage: 曲目/动作/模型目录与关键点序列
|
||
- name: opendance-android
|
||
kind: websocket-consumer
|
||
contract: contracts/websocket-keypoints.md
|
||
usage: 本端为服务端,Android 主动连入推流
|
||
|
||
tasks:
|
||
- id: T-WIN-001
|
||
file: tasks/001-scaffold.md
|
||
scope: Godot 项目骨架
|
||
status: done
|
||
- id: T-WIN-002
|
||
file: tasks/002-rest-client.md
|
||
scope: 调用 Web 服务端 API
|
||
status: done
|
||
- id: T-WIN-003
|
||
file: tasks/003-websocket-receiver.md
|
||
scope: 接收 Android 关键点帧
|
||
status: done
|
||
- id: T-WIN-004
|
||
file: tasks/004-keypoint-deserialize.md
|
||
scope: 239 字节帧反序列化
|
||
status: done
|
||
- id: T-WIN-005
|
||
file: tasks/005-vrm-loader.md
|
||
scope: VRM 模型加载
|
||
status: done
|
||
- id: T-WIN-006
|
||
file: tasks/006-skeleton-retarget.md
|
||
scope: 关键点 -> VRM 骨骼重定向
|
||
status: done
|
||
- id: T-WIN-007
|
||
file: tasks/007-scoring-dtw.md
|
||
scope: DTW 评分引擎
|
||
status: done
|
||
- id: T-WIN-008
|
||
file: tasks/008-game-ui.md
|
||
scope: 主界面 + 游戏界面 + 结算
|
||
status: done
|
||
- id: T-WIN-009
|
||
file: tasks/009-source-display.md
|
||
scope: 模型/动作来源信息展示
|
||
status: done
|
||
- id: T-WIN-010
|
||
file: tasks/010-about-page.md
|
||
scope: 关于页面 + 开源声明
|
||
status: done
|
||
- id: T-WIN-011
|
||
file: tasks/011-build-script.md
|
||
scope: Windows 打包脚本
|
||
status: done
|
||
- id: T-WIN-012
|
||
file: tasks/012-about-version.md
|
||
scope: 「关于」清单展示当前版本号
|
||
status: done
|
||
- id: T-WIN-013
|
||
file: tasks/013-scene-selection.md
|
||
scope: API 升级 rest-api 0.5.0 + 场景选择 + 物理落地
|
||
status: done
|
||
- id: T-WIN-014
|
||
file: tasks/014-full-package.md
|
||
scope: 发布整包(单个 zip + SHA256SUMS,不拆分卷)
|
||
status: done
|
||
- id: T-WIN-016
|
||
file: tasks/016-aabb-transforms.md
|
||
scope: 场景包围盒沿树累乘变换(修复入树前用 global_transform 导致的 ERROR 与范围偏位)
|
||
status: done
|
||
- id: T-WIN-015
|
||
file: tasks/015-keepalive-dedup.md
|
||
scope: 连接保活 / 设备去重 / 状态机(契约 websocket-keypoints 0.2.0,与 T-AND-011 对齐)
|
||
status: done
|
||
|
||
deliverable:
|
||
artifact: opendance-windows-v0.2.1.zip
|
||
packaging: Godot 导出脚本(Linux 直接导出 / Windows 兜底)
|
||
release_rules: # 文档 §5.7 硬性要求
|
||
- 单个完整包,禁止 .partN 分卷
|
||
- 同时上传 SHA256SUMS(裸文件名,可直接 sha256sum -c)
|
||
includes:
|
||
- OpenDance.exe
|
||
- OpenDance.pck
|
||
- THIRD_PARTY.md
|
||
- README.txt
|
||
- README.md
|
||
- contracts/ # 当前版本契约快照
|