Add ramp scene and implement Phase 6 for dynamic IK and terrain-following locomotion

- Created a new scene file `ramp.scene` with terrain and stickman objects, including event rules for ragdoll and recovery actions.
- Documented Phase 6 implementation in `PHASE_6_GROUND_SNAPPING.md`, detailing the continuous dynamic IK, terrain-following locomotion, and constraints for stickman rigs.
- Defined scene structure, layered IK ownership, probe contracts, and per-frame solve order for terrain interaction.
- Verified functionality for terrain snapping, stance/swing blending, pelvis/root compensation, and navigation synchronization.
This commit is contained in:
2026-09-16 09:33:07 -04:00
parent a7c58705e1
commit 08247eadef
7 changed files with 1088 additions and 44 deletions
+12 -4
View File
@@ -190,7 +190,7 @@ tracks/1/keys = {
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("IK_Targets/Right_Leg:position")
tracks/2/path = NodePath("AnimationTargets/Right_Leg_Base:position")
tracks/2/interp = 2
tracks/2/loop_wrap = true
tracks/2/keys = {
@@ -202,7 +202,7 @@ tracks/2/keys = {
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("IK_Targets/Left_Leg:position")
tracks/3/path = NodePath("AnimationTargets/Left_Leg_Base:position")
tracks/3/interp = 2
tracks/3/loop_wrap = true
tracks/3/keys = {
@@ -266,7 +266,7 @@ tracks/1/keys = {
tracks/2/type = "value"
tracks/2/imported = false
tracks/2/enabled = true
tracks/2/path = NodePath("IK_Targets/Right_Leg:position")
tracks/2/path = NodePath("AnimationTargets/Right_Leg_Base:position")
tracks/2/interp = 2
tracks/2/loop_wrap = true
tracks/2/keys = {
@@ -278,7 +278,7 @@ tracks/2/keys = {
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("IK_Targets/Left_Leg:position")
tracks/3/path = NodePath("AnimationTargets/Left_Leg_Base:position")
tracks/3/interp = 2
tracks/3/loop_wrap = true
tracks/3/keys = {
@@ -555,6 +555,14 @@ position = Vector2(110, 390)
[node name="Left_Leg" type="Marker2D" parent="IK_Targets" unique_id=63598929]
position = Vector2(-110, 380)
[node name="AnimationTargets" type="Node2D" parent="."]
[node name="Right_Leg_Base" type="Marker2D" parent="AnimationTargets"]
position = Vector2(110, 390)
[node name="Left_Leg_Base" type="Marker2D" parent="AnimationTargets"]
position = Vector2(-110, 380)
[node name="RayCast_LeftLeg" type="RayCast2D" parent="IK_Targets" unique_id=2000000001]
position = Vector2(-96, 200)
target_position = Vector2(0, 200)