• v0.2.0 86e5decd10

    zijunchiang released this 2026-09-17 03:42:06 +08:00 | 14 commits to main since this release

    ⚠️ 本版已被 v0.2.1 取代(建议直接用 v0.2.1):
    v0.2.0 存在场景包围盒缺陷 —— SceneRuntime._compute_aabb() 在节点入树前调用
    global_transform,会打一行 !is_inside_tree() 的 ERROR,且对把网格摆在非原点
    位置的场景算出的范围偏小/偏位(风力可能作用不到物体上)。
    v0.2.1 已修复,并新增 21 项"真机等价"无头测试与版本号一致性强制校验。

    OpenDance Studio -- Windows 客户端 v0.2.0

    场景选择与物理落地(《DSH 开发文档 v1.6》5.6 / T-WIN-013)、
    「关于」清单版本号(11.2 / T-WIN-012)、发布必须是单个完整包(5.7 / T-WIN-014)、
    连接保活与设备去重(6.5 / T-WIN-015)。

    契约快照同步到 rest-api 0.5.0、websocket-keypoints 0.2.0、data-models 0.7.0、
    database 0.4.0(与 opendance-web / opendance-android 逐字节一致)。

    ✅ 发布资产已就位:opendance-windows-v0.2.0.zip(26,625,705 B)+ SHA256SUMS。

    本包使用 LZMA 压缩:发布时 Gitea 站点 IIS 的
    maxAllowedContentLength 仍是默认的 30,000,000 字节,37 MB 的 deflate 整包
    上传固定返回 HTTP 413(16.4 MB 通过、30.5 MB / 37 MB / 40 MB 全部 413)。
    为了不再拆分卷,改为 ZIP_METHOD=lzma 打包:37 MB → 26 MB,得以正常上传。

    ⚠️ 解压要求:Windows 10 的资源管理器不支持 LZMA(method 14) 的 zip,
    请用 7-Zip / WinRAR / PeaZip 解压(Win11 24H2+ 起资源管理器原生支持 7z 等格式,
    但本项目未在 Windows 上实测)。解压后目录内必须是
    OpenDance.exe + OpenDance.pck 同目录,双击 OpenDance.exe 运行。

    若运维已把 IIS 上限放开到 256 MB,可用默认方式重新打包得到可双击解压的 deflate 包:
    bash build/package-release.sh 0.2.0(约 38 MB)。

    sha256sum -c SHA256SUMS     # 期望 OK
    7z x opendance-windows-v0.2.0.zip
    

    【排查更正】 此前我把另一个现象(HTTP 500 {"message":"","url":"…/api/swagger"},
    空消息)判成"Gitea 宿主机磁盘写满"——那是误判:该接口 multipart 字段名是
    attachment,用 file= 才会得到这个空消息 500。Gitea 附件接口本身完全正常
    (同一 1 KB 文件:-F "attachment=@…" → 201、--data-binary @…?name= → 201、
    -F "file=@…" → 500)。正确写法记在 deploy/proxy/README.md 第九节。

    连接保活与设备去重(T-WIN-015,本次一并交付)

    与 Android 端 v0.2.0 的 T-AND-011「两端一起改」,契约 websocket-keypoints 提升到 0.2.0:

    • welcome / config 声明 silentTimeoutMs = 15000 与 heartbeatIntervalMs = 5000
      (心跳 < 静默超时的一半);新增应用层 ping / pong。
      原 5 秒静默超时 + 客户端只有协议层 ping(底层库自动应答,本端应用层看不到)
      是"画面里没人就掉线、然后疯狂重连"的根因;
    • 按 hello.deviceId 去重:同一设备的新连接替换旧连接(旧连接以 1000 关闭,
      对端不会重连),界面显示去重后的设备数;
    • 逐客户端维护与 Android 端同名的连接状态
      (connecting → handshaking → streaming → degraded,终态 stopped),
      并记录 close code / 协商子协议 / 连接·握手·首帧时间;「查看接收状态」可逐台查看。

    无头测试 720 通过 / 0 失败(test_pose_server.gd 新增 7 项),
    build/verify.sh 三步全通过。

    校验

    检查 结果
    无头测试 720 通过 / 0 失败(test_pose_server.gd 新增 7 项;场景相关 12 项)
    build/verify.sh 三步全通过(脚本编译 / 无头测试 / 180 帧启动无运行时错误)
    Windows 导出 OpenDance.exe 106,605 KiB(PE 头 MZ 校验通过)+ OpenDance.pck 141 KiB
    整包完整性自检 解压后 OpenDance.exe + OpenDance.pck 同目录同名、PE 头 MZ、pck 魔数 GDPC
    包内文档与 tag 树一致 README.txt / README.md / THIRD_PARTY.md / contracts/* 共 11 个文件 md5 逐字节一致
    版本号 project.godot 与导出 .pck 均为 0.2.0;「关于」清单展示 v0.2.0

    交付物与校验和

    opendance-windows-v0.2.0.zip     26,625,705 字节(LZMA 压缩,单个完整包;解压后约 104 MB)
      ├── OpenDance.exe
      ├── OpenDance.pck
      ├── THIRD_PARTY.md
      ├── README.txt / README.md
      └── contracts/                 契约快照(与另两端逐字节一致)
    SHA256SUMS                       裸文件名,下载目录内 sha256sum -c 直接可用
    

    opendance-windows-v0.2.0.zip sha256:
    e45398bcf4a50e6ddd6f4d475f3e8f19dc7c33177663fa447980a771bc869e03

    关于本次重新打包(域名占位符修正)

    交付文档里原有的「Gitea 地址 / 属主」占位符已补齐为真实值
    (gitea.kasugano.cn / 属主 zijunchiang)—— 域名与仓库属主属于「部署必需且
    非隐私」的信息,文档中直接写明
    ;口令、访问令牌等真正的秘密项仍是占位符。

    因为本整包还没有上传成功(见上),所以直接按修正后的文档重新打包,
    避免发布出一个域名仍是占位符的包;因此 sha256 由
    e45398bcf4a50e6ddd6f4d475f3e8f19dc7c33177663fa447980a771bc869e03
    更新为 e45398bcf4a50e6ddd6f4d475f3e8f19dc7c33177663fa447980a771bc869e03,
    并把 v0.2.0 标签移到含修正文档的提交上。

    下载后

    sha256sum -c SHA256SUMS
    unzip opendance-windows-v0.2.0.zip
    # 进入目录后双击 OpenDance.exe(OpenDance.pck 必须与它同目录)
    
    Downloads