← Cheatsheets
Tags: godot, gdscript, scene-tree, signals, process, tweening, export, game-engine
Last updated: 2026-06-27
Godot (GDScript) Cheatsheet
Quick Reference
| Concept | Key API |
| Lifecycle | _ready() / _process(delta) / _physics_process(delta) |
| Scene tree | get_node() / $ shorthand / @onready |
| Signals | .connect() / .emit() / signal keyword |
| Tweening | create_tween() / tween_property() / tween_method() |
| Export variables | @export var / @export_range / @export_enum |
| Input | Input.is_action_pressed() / _input(event) |
| Groups | add_to_group() / get_tree().call_group() |
| Resources | preload() / load() / Resource type |
Scene Tree & Node Access
var player = $Player
var health_bar = $UI/HealthBar
@onready var anim = $AnimationPlayer
@onready var sprite = $Sprite2D as Sprite2D
Enter tree → _enter_tree()
Ready → _ready()
Process → _process(delta)
Physics → _physics_process(delta)
Exit tree → _exit_tree()
func _ready():
$Label.text = "Hello, Godot!"
func _physics_process(delta):
velocity += gravity * delta
move_and_slide()
func _process(delta):
$FPSLabel.text = "FPS: %d" % Engine.get_frames_per_second()
Signals
signal health_changed(new_health: int, max_health: int)
signal died
health_changed.emit(75, 100)
died.emit()
func _ready():
$Button.pressed.connect(_on_button_pressed)
player.health_changed.connect(_on_health_changed)
func _on_button_pressed(): print("Clicked!")
func _on_health_changed(new_hp: int, max_hp: int):
health_bar.value = float(new_hp) / max_hp
Editor connection: Select source node → Node dock → Signals tab → double-click signal → pick target.
$Timer.timeout.connect(func(): queue_free(), CONNECT_ONE_SHOT)
_process vs _physics_process
func _process(delta): position.x += speed * delta
func _physics_process(delta): velocity = direction * speed; move_and_slide()
- _process: Input polling, UI, camera smoothing, visual effects
- _physics_process:
move_and_slide(), move_and_collide(), RigidBody forces
Tweening
var tween = create_tween()
tween.tween_property($Sprite, "position", Vector2(200, 0), 0.5)
tween.tween_property($Sprite, "modulate:a", 0.0, 0.3)
tween.set_trans(Tween.TRANS_BOUNCE).set_ease(Tween.EASE_OUT)
tween.tween_property($Sprite, "scale", Vector2(2, 2), 0.8)
tween.tween_method(_update_health, 100.0, 0.0, 1.0)
tween.tween_callback(_on_tween_finished)
tween.set_parallel(true)
tween.tween_property($A, "position:x", 100, 0.5)
tween.tween_property($B, "position:y", 200, 0.5)
Easing Quick Reference
| Transition | Ease |
TRANS_LINEAR / TRANS_SINE | EASE_IN / EASE_OUT / EASE_IN_OUT |
TRANS_BOUNCE / TRANS_ELASTIC | EASE_OUT |
TRANS_BACK | EASE_IN / EASE_OUT |
@export Variables
@export var speed: float = 200.0
@export var max_health: int = 100
@export_range(0, 100) var volume: float = 80
@export_range(0.1, 2.0, 0.1) var scale_mult: float = 1.0
@export_enum("Warrior", "Mage", "Rogue") var character_class: String
@export var weapon: PackedScene
@export var hit_sound: AudioStream
@export var target_node: NodePath
@export_multiline var dialogue: String
@export var waypoints: Array[Vector2] = []
@export_group("Combat")
@export var damage: int = 10
@export var attack_speed: float = 1.0
Input
func _physics_process(_delta):
var direction = Input.get_axis("move_left", "move_right")
if Input.is_action_just_pressed("jump"): velocity.y = -jump_force
func _input(event: InputEvent):
if event is InputEventMouseButton and event.pressed:
if event.button_index == MOUSE_BUTTON_LEFT: _shoot()
if event is InputEventKey and event.pressed:
match event.keycode: KEY_ESCAPE: _pause()
func _process(_delta):
look_at(get_global_mouse_position())
Tips
- Use
$ shorthand for node paths — a GDScript-only convenience.
- Groups (
add_to_group("enemies") + get_tree().call_group()) for broadcasting.
preload() at parse time; load() for runtime dynamic loading.
- In GDScript,
null is falsy — if node: checks existence.
- Use
@onready for any node access depending on the scene tree.
- Godot's AnimationPlayer can animate ANY property — not just transforms.
class_name registers a script as a global type with auto-complete.