Roadmap

Learning path

Real flowcharts โ€” pipelines, skill trees, scene trees โ€” not a wall of boxes. Click nodes to jump into docs or practice.

Follow the arrows. Or ignore them and get roasted by Byte later.

Maps

Decision flowPick a lane โ€” no wrong answers
New here?Never codedKnow some codeKnow Godot bitsBasics cardsPlay gamesSprite Lab
Scene treeHow Godot nests nodes โ€” parent โ†’ children
Main (Node2D)Player (CharacterBody2D)Sprite2DCollisionShape2DCamera2DWorld (Node2D)Floor (StaticBody2D)Coin (Area2D)UI (CanvasLayer)HUD (Control)

Scripts usually live on Player / Coin. Children like Sprite2D are grabbed with $Sprite2D.

Chapter list

Syntax & types (the atoms)

Yes, we start at integers. No, you cannot skip to shaders yet.

What is GDScript?

Godot's Python-like language. Indentation matters. Colons start blocks. You attach scripts to nodes.

Integers (int)

Whole numbers: health, scores, ammo counts.

var hp: int = 100
var coins := 3  # := guesses the type

Floats (float)

Decimals: speed, timers, percentages.

var speed: float = 220.5
var dt: float = 0.016

Strings & bools

Text and true/false.

var name: String = "Hero"
var alive: bool = true
print("Hi %s" % name)

var vs const

var can change. const cannot โ€” use for max HP, gravities, IDs.

const MAX_HP := 100
var hp := MAX_HP
hp -= 10  # ok
# MAX_HP = 200  # error

Operators

+ - * / % and comparisons == != < > <= >= and logic and / or / not

var dmg = 5 * 2
if hp <= 0 and alive:
    alive = false

Control flow

Without if statements your game is a slideshow.

if / elif / else

if hp <= 0:
    die()
elif hp < 20:
    warn()
else:
    chill()

match (switch vibes)

match state:
    "idle": play_idle()
    "run": play_run()
    _: pass

Loops

for i in range(5):
    print(i)
for enemy in enemies:
    enemy.take_hit(1)
while loading:
    await get_tree().process_frame

Functions & lifecycle

_ready is where dreams and null references collide.

Defining functions

func heal(amount: int) -> void:
    hp = mini(hp + amount, MAX_HP)

func get_ratio() -> float:
    return float(hp) / float(MAX_HP)

Lifecycle callbacks

_ready() once when in tree. _process(delta) every frame. _physics_process(delta) on physics tick.

func _ready() -> void:
    print("hello scene")

func _process(delta: float) -> void:
    # visuals / non-physics
    pass

Vectors & movement

Games are just vectors wearing costumes.

Vector2

x = right, y = down in 2D Godot. position, velocity, direction.

var pos := Vector2(100, 200)
var vel := Vector2.RIGHT * 120
position += vel * delta

Useful helpers

dir = dir.normalized()
dist = a.distance_to(b)
lerp_pos = a.lerp(b, 0.1)

Practice for real

Open the Sprite Lab โ€” write code, move a sprite, unlock levels.

# Go to /lab and make the square walk.

Nodes, scenes, resources

Everything is a node. Even your mistakes.

Scene tree

Scenes (.tscn) are reusable node trees. Scripts extend a node type.

extends Node2D
@onready var sprite: Sprite2D = $Sprite2D
@export var speed := 200.0

Spawning

var packed = preload("res://enemy.tscn")
var e = packed.instantiate()
add_child(e)

Signals

Events without telepathy. Revolutionary.

Declare, connect, emit

signal died
func kill():
    died.emit()

# elsewhere:
player.died.connect(_on_player_died)

await

await get_tree().create_timer(1.0).timeout
await anim.animation_finished

2D game building

Platformers: the 'hello world' of shame and glory.

CharacterBody2D

velocity.x = input * speed
velocity.y += gravity * delta
move_and_slide()

Build track

After Level 2 XP: follow the Platformer and Ping Pong tutorials under Build.

Also learn

TileMaps, Cameras, Area2D hitboxes, AnimationPlayer, AudioStreamPlayer.

Into 3D

Congratulations โ€” now you have a Z axis to regret.

Node3D & Vector3

Same ideas as 2D: position, basis, cameras โ€” plus depth.

extends CharacterBody3D
@export var speed := 5.0

func _physics_process(delta):
    var input := Input.get_vector("ui_left","ui_right","ui_up","ui_down")
    var dir := (transform.basis * Vector3(input.x, 0, input.y)).normalized()
    velocity.x = dir.x * speed
    velocity.z = dir.z * speed
    move_and_slide()

3D checklist

MeshInstance3D for looks, CollisionShape3D for physics, Camera3D to see, Environment for lighting/sky. Start with a capsule + floor plane before your open-world MMO.

From 2D skills โ†’ 3D

Signals, scenes, resources, and input maps transfer. Only the math gains a dimension.