-
released this
2026-09-17 03:59:30 +08:00 | 13 commits to main since this release⚠️ 本版已被 v0.2.2 取代(建议直接用 v0.2.2):
本版的OpenDance.exe在 Windows「右键 → 属性 → 详细信息」里显示的
文件版本 / 产品版本是 0.1.0,而产物名与 tag 是 v0.2.1 —— 元数据不可核对。
根因是export_presets.cfg的application/file_version/
application/product_version被硬编码成 0.1.0 后无人更新;
v0.2.2 起由sync-export-version.sh在导出前同步、由check-pe-version.sh
直接读产物 exe 的 PE 版本资源复核。OpenDance Studio -- Windows 客户端 v0.2.1
场景包围盒修复 + 21 项"真机等价"无头测试 + 版本号一致性强制校验。
本版取代 v0.2.0(v0.2.0 存在下述缺陷)。契约快照不变:
rest-api 0.5.0/websocket-keypoints 0.2.0/data-models 0.7.0/
database 0.4.0(与 opendance-web / opendance-android 逐字节一致)。一、修复:场景包围盒在"未入树"时用
global_transformSceneRuntime._compute_aabb()原先用MeshInstance3D.global_transform计算包围盒,
而它在_assemble()里被调用 —— 那时运行时节点还没被加入场景树:-
Godot 会打一行错误日志(真机每次载入场景都刷一条,与"日志里不应出现 ERROR"的
排查约定冲突):ERROR: Condition "!is_inside_tree()" is true. Returning: Transform3D() -
树外的
global_transform返回单位变换,于是算出来的只是各网格的局部 AABB。
包围盒用于①重力/风Area3D的碰撞盒尺寸与位置 ②兜底地面的尺寸与位置 ——
对于把网格摆在非原点位置的场景(导出 GLB 的常见情况),区域会偏小或偏位,
风力/重力可能作用不到物体上。
修复:改为从根节点往下累乘
Node3D.transform,不依赖是否入树;
运行时挂在单位变换的父节点下时,结果与旧语义一致。二、新增 21 项无头"真机等价"测试(不需要设备)
场景(
tests/test_scene_config.gd)在代码里手写一个合法 GLB(三角形:POSITION 3×VEC3 + indices 3×u16 + BIN chunk)
落盘后真实加载,核对:- 真实 GLB 加载
warnings为空、不使用兜底地面; colliders三种取值:mesh→ 按网格生成;auto命中*_col→ 生成;
auto未命中 → 兜底地面并标记;none→ 不生成也不兜底;- 重力
Area3D的gravity/gravity_direction与服务端配置一致,
且用SPACE_OVERRIDE_REPLACE(不改全局ProjectSettings); - 风力按基础风向量生效(与
WIND_FORCE_SCALE对齐),describe()摘要可核对; - 带位移网格(节点
translation [10,0,0])时,重力区域碰撞盒与兜底地面
都跟着位移(x≈10)—— 即上述缺陷的回归测试。
保活的时间维度(
tests/test_pose_server.gd)用真实的 15 秒静默超时跑一次对照:
- 只发应用层
ping、不发任何关键点帧的客户端,17 秒后仍保持连接
—— 这正是"画面里没人就掉线、然后疯狂重连"的根因对照(契约 §1.1 的应用层心跳); - 连上后什么都不发的客户端被
close(1001, "timeout")断开(超时机制仍有效,
且按契约 §7 对端不会重连)。
三、新增版本号一致性强制校验
build/check-version.sh:强制project.godot的application/config/version
(「关于」清单与导出.pck的唯一来源)与project.yaml、发布版本号三者一致;
已接入build/package-release.sh(打包前)与build/verify.sh(第 0/4 步),
并做过反向验证(把project.godot改错后校验立刻失败)。
此前没有任何机制保证这两个文件同步 —— 界面显示的版本可能与产物名不一致。本版三者一致为 0.2.1,并已用
strings核对导出.pck内的版本号同为0.2.1。校验
build/verify.sh四步全通过:版本一致性 → 脚本编译 → 751 项断言(原 720)→
180 帧启动无运行时错误;- 导出
OpenDance.exe106,605 KiB(PE 头MZ)+OpenDance.pck141 KiB; - 整包
7z t完整性测试通过、解压后OpenDance.exe+OpenDance.pck同目录。
交付物与校验和
opendance-windows-v0.2.1.zip 26,627,191 字节(LZMA 压缩,单个完整包) ├── OpenDance.exe ├── OpenDance.pck ├── THIRD_PARTY.md ├── README.txt / README.md └── contracts/ 契约快照(与另两端逐字节一致) SHA256SUMS 裸文件名,下载目录内 sha256sum -c 直接可用opendance-windows-v0.2.1.zipsha256:
d49885327047f5a52de6c732431ea080cd1a030ae1c581a8bc0ec0d99bfb792c⚠️ 解压要求:本包用 LZMA 压缩(发布时 Gitea 站点 IIS 的
maxAllowedContentLength仍是默认的 30,000,000 字节,37 MB 的 deflate 整包会返回
HTTP 413)。Windows 10 的资源管理器不支持 LZMA(method 14) 的 zip,请用
7-Zip / WinRAR / PeaZip 解压;解压后OpenDance.exe与OpenDance.pck
必须在同一目录。若运维已把 IIS 上限放开到 256 MB,可用
bash build/package-release.sh 0.2.1得到可双击解压的 deflate 包。下载与安装
sha256sum -c SHA256SUMS 7z x opendance-windows-v0.2.1.zip # 进入目录后双击 OpenDance.exeDownloads
-