Kinematic Body
2026/01/03
- Type
- Learning Resource
- Format
- Glossary Article
- Version
- General
- Subject Tags
- Created
- Updated
- 2026/02/16
- 2026/01/03
A kinematic body is a physics object that you move with your own code instead of letting physics forces move it. Kinematic bodies don't respond to physics interactions on their own. External forces like gravity and other physics bodies can't push or affect them unless you write code to allow that.
With kinematic bodies, you write the movement code yourself, check for collisions, and change their position when needed. This gives you more control and usually works well for player characters because you can adjust the velocity and input response exactly how you want. We generally use kinematic bodies for player characters and game entities that need predictable movement.
In games, we talk about kinematic bodies in contrast to rigid bodies, which are physics entities affected by external forces like gravity or being hit by something. In physics, a rigid body refers to a solid object that doesn't deform much when forces act on it. That's where the term comes from, but in games, "rigid body" usually means an object that has believable physics (like a ball rolling down a hill, bumping into obstacles, and bouncing off walls).
In Godot, you create kinematic bodies using the CharacterBody3D and CharacterBody2D nodes for 3D and 2D games, respectively. These nodes are named this way because we often use them for characters controlled by the player, and they offer built-in functions to help with common movement features, which goes beyond just basic kinematic body features.
Here's a simple example of how to use this node in Godot for a 2D side scroller character:
extends CharacterBody2D
var walk_speed := 400.0
var gravity := 2000.0
var jump_velocity := -800.0
func _physics_process(delta):
velocity.x = Input.get_axis("move_left", "move_right") * walk_speed
velocity.y += gravity * delta
if is_on_floor() and Input.is_action_just_pressed("jump"):
velocity.y = jump_velocity
velocity = move_and_slide(velocity)In this example, we manually control the character's horizontal movement based on player input, apply gravity to the vertical velocity, and handle jumping. The CharacterBody2D node comes with a built-in member variable for velocity and a function called move_and_slide() that helps with moving the body while handling collisions smoothly.
Don't stop here. Step-by-step tutorials are fun but they only take you so far.
Try one of our proven study programs to become an independent Gamedev truly capable of realizing the games you’ve always wanted to make.
Get help from peers and pros on GDQuest's Discord server!
20,000 membersJoin ServerThere are multiple ways you can join our effort to create free and open source gamedev resources that are accessible to everyone!
Sponsor this library by learning gamedev with us onGDSchool
Learn MoreImprove and build on assets or suggest edits onGithub
Contributeshare this page and talk about GDQUest onRedditYoutubeTwitter…