Kinematic Body

2026/01/03

Type
Learning Resource
Format
Glossary Article
Version
General
Subject Tags
Code
Assets
All else
Copyright 2016-2026, GDQuest
Created
2026/02/16
Updated
2026/01/03

Kinematic Body

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.

Become an Indie Gamedev with GDQuest!

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.

Nathan

Founder and teacher at GDQuest
  • Starter Kit
  • Learn Gamedev from Zero
Check out GDSchool

You're welcome in our little community

Get help from peers and pros on GDQuest's Discord server!

20,000 membersJoin Server

Contribute to GDQuest's Free Library

There are multiple ways you can join our effort to create free and open source gamedev resources that are accessible to everyone!