1.7 KiB
1.7 KiB
2026-09-24
滑索(Zipline)组件 —— 新增
需求:Godot 4 第三人称滑索,要求全程用 Godot MCP 搭建。
新增 / 改动:
world/zipline/zipline.gd+zipline.tscn:两个 Marker3D 锚点 + 抛物线下垂曲线。 缆绳网格在_ready()用 SurfaceTool 现造,子节点不给 owner → 不会被写进 .tscn。 对外接口:sample / tangent / ride_point / closest_point;手感参数(速度、刹车、吸附半径)都放在这一侧。character/player/player.gd:新增_find_zipline / _attach_zipline / _detach_zipline / _ride_zipline。 缆上直接写global_position,不走move_and_slide();相机在缆上缓慢对齐到行进方向。character/player/player.tscn:新增InteractHint(Label3D),沿用 HealthLabel 的「节点配置」做法。project.godot:新增interact输入动作(E)。world/main.tscn:演示关卡 —— LaunchRamp(26.57° 斜引道)+ LaunchDeck(顶面 y=6.0)+ Zipline 实例。tests/test_zipline.gd:13 项回归测试,钉住几何契约(端点、下垂量、切线方向、下滑方向、悬挂偏移)。
验证:全量测试 20/20 通过(180 条断言);实跑三次,按 E 后玩家从 (0,0,0) 滑到 (0,0,18.8) 缆末端。
关键取舍:
sag定义成「中点下垂深度」而不是比例 —— 调参所见即所得,不用解悬链线方程。- 出口固定为较低的那个锚点(滑索只能往下滑),两端等高时退回 A→B。
- 模型里没有滑索动画片段,所以缆上复用下落姿态:
animator.set_motion(velocity, false, false), 没有为此在PlayerAnimator里加新状态。