JVDesignStudio · Godot 4 Guide

How To
Godot 4
Build Your First Platformer

A step-by-step beginner guide to building a complete 2D platformer using Godot 4 and GDScript. No game dev experience needed just follow along module by module.

Godot 4.3 GDScript 🆓 Free 📄 PDF Included Ages 10+
EngineGodot 4.3
LanguageGDScript
Modules8 + Bonus
Duration5+ Hours
LevelBeginner
PriceFree

What You'll Build & Learn

By the end you'll have a fully playable 2D platformer and the skills to keep building from there.

⚙️
Godot Basics
Master Nodes, Scenes, Signals, and the Editor. Understand how Godot projects are structured.
🏃
Player Control
Responsive running, jumping, and gravity using CharacterBody2D and GDScript physics.
🗺️
Level Design
Build interactive levels with TileMaps, TileSets, and parallax scrolling backgrounds.
👾
Enemies & Hazards
Patrolling enemy AI, collision detection, player death and respawn logic.
🎮
UI & Game State
Coin collectibles, HUD score counter, game over screens, managing state with signals.
🚀
Export & Ship
Sound effects, music, a main menu, and exporting your game for PC and web.

8 Modules + Bonus

Follow along from zero to a finished, exportable game. Every module builds on the last.

Module 01 · Setup
Setting Up Your Project

Install Godot 4, understand the editor interface, configure project settings, and organise your asset folders.

  • Download Godot 4.3 from godotengine.org choose the Standard version (not .NET)
  • Launch Godot and click New Project give it a name and pick a folder
  • Explore the editor: Scene panel (top-left), Filesystem (bottom-left), Inspector (right), Viewport (centre)
  • Create your folder structure: res://scenes/, res://scripts/, res://assets/
  • Set Project Settings → Display → Window to your target resolution (e.g. 1280×720)
Godot is free and open source. No licence, no subscription. You own everything you make with it.
Godot 4.3Project SetupEditor Tour
Module 02 · Player
The Player: CharacterBody2D

Create the player scene, set up CollisionShape2D, and write your first GDScript basic structure and properties.

  • Create a new scene add a CharacterBody2D node as root, rename it "Player"
  • Add a Sprite2D child node, assign your player texture in the Inspector
  • Add a CollisionShape2D child — set Shape to CapsuleShape2D, size it to fit your sprite
  • Right-click Player node → Attach Script → GDScript → Create
  • Save the scene as res://scenes/player.tscn
# player.gd starter script
extends CharacterBody2D

const SPEED = 200.0
const JUMP_VELOCITY = -450.0
var gravity = ProjectSettings.get_setting("physics/2d/default_gravity")
CharacterBody2DGDScriptCollision
Module 03 · Physics
Movement & Jumping

Implement responsive left/right movement, jump velocity, gravity, and the move_and_slide() loop.

func _physics_process(delta):
    # Apply gravity when airborne
    if not is_on_floor():
        velocity.y += gravity * delta

    # Jump
    if Input.is_action_just_pressed("ui_accept"):
        if is_on_floor():
            velocity.y = JUMP_VELOCITY

    # Horizontal movement
    var direction = Input.get_axis("ui_left", "ui_right")
    velocity.x = direction * SPEED

    move_and_slide()
move_and_slide() handles all collision response automatically. It moves the character and slides along surfaces you don't need to write collision logic yourself.
PhysicsGravitymove_and_slide()
Module 04 · Levels
Creating Interactive Terrain

Build your levels using TileSets and TileMaps, add collision layers, and design your first playable stage.

  • Create a new scene add a TileMap node as root
  • In the Inspector, create a new TileSet resource — set tile size (e.g. 32×32)
  • Click the TileSet editor drag your tileset texture in, then select tiles and add Physics Layer collision shapes
  • Back in the TileMap, paint your level using the tile palette at the bottom of the screen
  • Add a Camera2D node to the Player scene enable Position Smoothing for a nice feel
Always set collision layers correctly. The player and tiles must be on compatible layers or they'll pass through each other.
TileMapTileSetLevel Design
Module 05 · Enemies
Enemies & Hazards

Simple patrolling enemy AI using RayCast2D, player death via Area2D overlap, and respawn checkpoints.

# enemy.gd simple patrol AI
func _physics_process(delta):
    if direction == 1 and $RightWall.is_colliding():
        direction = -1
    elif direction == -1 and $LeftWall.is_colliding():
        direction = 1
    velocity.x = direction * SPEED
    move_and_slide()
Use two RayCast2D nodes pointing left and right at the edge of the platform. When one detects a wall, flip the direction. Simple but effective.
Enemy AIArea2DRespawn
Module 06 · UI & HUD
Collectibles & UI

Coin collectibles with Area2D, a score counter HUD using Labels, and managing game state with Autoloads.

# coin.gd collected by player
func _on_body_entered(body):
    if body.is_in_group("player"):
        GameState.score += 1
        emit_signal("coin_collected")
        queue_free()
  • Create a CanvasLayer scene for your HUD add Labels for score and lives
  • Create an Autoload called GameState (Project Settings → Autoload) store score and lives here
  • Connect signals from coins/enemies to update the HUD
HUDSignalsAutoload
Module 07 · Polish
Finishing Touches

Add sound effects with AudioStreamPlayer, background music, and build a simple main menu scene with buttons.

  • Add AudioStreamPlayer nodes to the player import WAV files for jump, land, and hurt sounds
  • Add a separate AudioStreamPlayer to the main scene for looping background music (use OGG format)
  • Create a MainMenu scene with a TextureRect background, title Label, and Start button
  • Connect the Start button to get_tree().change_scene_to_file("res://scenes/level_1.tscn")
OGG files loop better than MP3 in Godot. Use Audacity (free) to trim your music to a clean loop point.
AudioMain MenuScene Switching
Module 08 · Export
Exporting Your Game

Configure export templates, build for PC and HTML5 web, and prepare for itch.io upload.

  • Open Project → Export click Add and choose your platform (Windows, Mac, HTML5)
  • Click Manage Export Templates download the templates for Godot 4.3
  • For HTML5: set the export path, click Export Project — this creates an index.html + .wasm file
  • On itch.io: upload as a ZIP containing all HTML5 export files, set Kind to HTML
  • Test in browser before publishing some features need HTTPS to work
The free itch.io HTML5 embed is the easiest way to share your game. Players can play instantly with no download.
ExportHTML5itch.io
★ Bonus Module · Visual FX
Particle Effects

Create beautiful dust trails for landing jumps and sparkling effects for coin pickups using GPUParticles2D.

  • Add a GPUParticles2D node to the Player scene it starts emitting immediately
  • Create a new ParticleProcessMaterial set Direction, Spread, Gravity, and Initial Velocity
  • Set One Shot = true and Explosiveness = 1.0 for burst effects (landing, hit)
  • Trigger it from code: $DustParticles.restart() on landing detection
# Detect landing to trigger dust burst
var was_on_floor = false

func _physics_process(delta):
    var just_landed = is_on_floor() and not was_on_floor
    if just_landed:
        $DustParticles.restart()
    was_on_floor = is_on_floor()
GPUParticles2DVisual FXPolish

Taste the Code

GDScript is Godot's beginner-friendly Python-like language. Here's a taste of what you'll write across the modules.

player.gd Jump Logic
if Input.is_action_just_pressed("ui_accept"):
    if is_on_floor():
        velocity.y = JUMP_VELOCITY

# Apply gravity when airborne
if not is_on_floor():
    velocity.y += gravity * delta
coin.gd Coin Pickup
func _on_body_entered(body):
    if body.is_in_group("player"):
        GameState.score += 1
        emit_signal("coin_collected")
        queue_free()
enemy.gd Patrol AI
func _physics_process(delta):
    if direction == 1 and $RightWall.is_colliding():
        direction = -1
    elif direction == -1 and $LeftWall.is_colliding():
        direction = 1
    move_and_slide()
level.gd Scene Transition
func _on_goal_reached():
    # Save score, load next level
    GameState.save_score()
    get_tree().change_scene_to_file(
        "res://scenes/level_2.tscn"
    )

Get the Full PDF

All 8 modules plus the bonus chapter step by step, with code examples throughout. Download free and go at your own pace.

How To Godot 4
Full Tutorial PDF
The complete guide offline. Every module, every code snippet, every tip in a single PDF you can print or read on any device.
Godot 4.3 GDScript 8 Modules + Bonus Free Forever Updated Nov 2025
📄 Download Free PDF
📄

What's Been Added

The tutorial is kept up to date with the latest Godot releases and community feedback.

Coming Next
Module 9: Animated Sprites & Character States
AnimationPlayer, state machines for player animations (idle, run, jump, fall), and blending transitions cleanly.
In Progress
Updated
Full Godot 4.3 Compatibility Check
Every module reviewed and updated — new editor UI changes, updated TileMap workflow, and revised export templates.
November 10, 2025
Added
Bonus Chapter: Particle Effects
GPUParticles2D for dust trails on landing, sparkle effects for coin pickups, and screen shake on enemy collision.
October 1, 2025

Keep Building