This README is also available in: Español (README.es.md)
In this class we focus on how to design and implement the jump in a classic old-school 2D platformer. We’ll start by analyzing what makes this jump unique and explain the theory behind it.
Then we’ll try the included POC, showing how the implemented jump achieves a classic feel. We’ll tweak parameters and see how small adjustments change the gameplay and player experience.
Finally, we’ll take a code tour: states, quirks, challenges, wins, and a reflection on viability in Unity.
- Understand why the classic jump isn’t about realism, but about control and expressiveness.
- Master key concepts: Coyote Time, Jump Buffer, variable height, asymmetric gravity, and jump cut.
- Learn to parameterize and fine-tune the jump to match the desired feel.
- Review a practical Unity implementation (scripts and states).
- A proof of concept with a jump state machine (Ground → Ascend → Apex → Fall).
- Editable parameters to experiment with feel.
- A custom collision system because we don’t use Unity’s physics engine for movement.
- GameAnalysis/: materials and utilities for frame-by-frame and curve analysis (see the folder for details).
GameAnalysis/contains info and scripts for frame/data analysis of the jump.
- Unity 6000.2.6f2 or higher.
- New Input System enabled (Project Settings → Player → Active Input Handling → Input System Package).
- Clone the repo and open it in Unity.
- Enable the Input System if needed.
- Open
Scenes/Sandbox.unity. - On the
Playerobject, check these components:Move(choose instant or accelerated movement).Jump(load theBaseProfilein /Assets/ScriptableObjects).
- Press Play and try:
- Holding/releasing the jump button at different times.
- Edge jumps (Coyote Time).
- Pressing jump just before landing (Buffer).
- Tweaking ascent/descent gravity and terminal velocity.
Turn on Gizmos to see on-scene metrics and visual guides.
MIT — see LICENSE in the repo.