Niki explains the wall running and jumping in her early Godot prototype, and why she moved the controller to a state machine.
Niki started this controller while learning to make 3D games in Godot. Inspired by
Ultrakill and
Cicadamata, she began with a first-person prototype and tried recreating some of her favorite movement mechanics.
Within about a week, she had dashing, sliding, bunny hopping, ground slams and wall jumps working. Slam jumps also gain more height after a longer fall.
The player script was getting harder to manage, so before adding wall running, Niki reorganized it into a state machine. This made it easier to manage the mechanics, add new ones and handle animations.
Once basic wall running was working, she wanted a visible character to make the movement easier to judge.
She modeled, rigged and animated her first character in Blender, then spent another week going back and forth between Blender and Godot to get it working in game.
Making wall running feel smooth took more work. A capsule shape cast, slightly larger than the player’s collider, detects nearby walls. Two side raycasts determine the running direction, while a downward raycast checks that the character is high enough above the ground before a wall run can begin.
With enough momentum, the character barely descends during a wall run. As speed drops, the character gradually slides off. Wall jumps add height while preserving forward momentum and giving a consistent boost away from the wall.
Repeated wall jumps can still build too much speed, letting players largely bypass wall running. Niki has been studying Titanfall to help balance the two mechanics.
The camera still needs more work, although an offset and automatic rotation already help track the character. Future ideas include using the character’s extendable limbs for grappling or taller jumps, plus wheels for skating and possibly wall riding.
Interested in the Technical side of Unity or Godot? Our
Shaders Bible Collection brings together six books on shaders and game development math for both engines.