Cheat Sheet GDScript
Terakhir diperbarui
Dasar dan output
Sebuah script memperluas (extends) tipe node, dan Godot memanggil fungsi-fungsinya untukmu.
| Operasi | Sintaks |
|---|---|
| Menempelkan script ke tipe node | extends Node |
| Kode yang dijalankan saat node dimulai | func _ready() -> void:
print("Hello, World!") |
| Mencetak nilai tanpa pemisah | print("HP: ", hp) |
| Mencetak nilai yang dipisahkan spasi | prints("a", "b", 3) |
| Komentar | # This is a comment |
| Komentar dokumentasi | ## Shown in the editor's help |
| String beberapa baris | var text := """Line one
Line two""" |
| Melaporkan error | push_error("Health is negative") |
| Melaporkan peringatan | push_warning("Old save file") |
Variabel, konstanta dan tipe
Tipe bersifat opsional. Tambahkan untuk pemeriksaan di editor, autocompletion, dan kode yang lebih cepat.
| Operasi | Sintaks |
|---|---|
| Variabel (tipe dinamis) | var score = 0 |
| Variabel dengan tipe statis | var speed: float = 200.0 |
| Menyimpulkan tipe statis | var lives := 3 |
| Konstanta | const MAX_HP = 100 |
| Enum | enum State { IDLE, RUN, JUMP } |
| Memakai nilai enum | var state: State = State.IDLE |
| Nilai vector dan warna | var pos := Vector2(10, 20)
var tint := Color(1, 0, 0) |
| Reference object kosong | var target: Node = null |
| Mengonversi ke teks, int, atau float | str(42), int("42"), float("3.5") |
| Float ke int (desimalnya dibuang) | int(3.9) # 3 |
| Memeriksa tipe | value is int, node is Sprite2D |
| Cast ke sebuah tipe | var sprite := node as Sprite2D |
Operator
Matematika yang sudah kamu kenal, ditambah kata-kata bahasa Inggris untuk logika.
| Operasi | Sintaks |
|---|---|
| Tambah, kurang, kali, bagi | a + b, a - b, a * b, a / b |
| Pembagian bilangan bulat (int / int) | 7 / 2 # 3 |
| Sisa bagi | 7 % 3, fmod(7.5, 2.0) |
| Pangkat | 2 ** 10 # 1024 |
| Penugasan gabungan | x += 1, x -= 1, x *= 2, x /= 2 |
| Perbandingan | ==, !=, <, >, <=, >= |
| Logika | a and b, a or b, not a |
| Logika (bentuk simbol) | a && b, a || b, !a |
| If dalam satu baris | var label := "win" if score > 10 else "lose" |
| Apakah ada di dalam collection | "sword" in inventory |
| Bitwise | a & b, a | b, a ^ b, ~a, a << 1, a >> 1 |
Alur kontrol
Blok ditentukan oleh indentasi, seperti Python. Secara default Godot memakai tab untuk indentasi.
| Operasi | Sintaks |
|---|---|
| If, elif, else | if hp <= 0:
die()
elif hp < 20:
print("Low HP")
else:
print("OK") |
| If satu baris | if hp <= 0: die() |
| Perulangan atas range | for i in range(5):
print(i) # 0 to 4 |
| Range dengan awal, akhir, dan langkah | for i in range(10, 0, -2):
print(i) # 10, 8, 6, 4, 2 |
| Mengulang sebanyak n kali | for i in 3:
print(i) # 0, 1, 2 |
| Perulangan atas array | for item in items:
print(item) |
| Variabel loop bertipe (Godot 4.2+) | for n: String in names:
print(n.to_upper()) |
| While loop | while hp > 0:
hp -= 10 |
| Keluar dari perulangan atau melewati satu langkah | break, continue |
| Placeholder untuk blok kosong | pass |
Pattern matching (match)
match menjalankan cabang pertama yang polanya cocok. Tidak ada fallthrough.
| Operasi | Sintaks |
|---|---|
| Mencocokkan nilai | match state:
State.IDLE:
print("idle")
State.RUN:
print("run") |
| Beberapa nilai dalam satu cabang | match key:
"w", "up":
move_up() |
| Cabang default (wildcard) | match n:
0:
print("zero")
_:
print("other") |
| Mengikat nilai ke sebuah nama | match cmd:
"quit":
get_tree().quit()
var other:
print("Unknown: ", other) |
| Pola array | match pos:
[0, 0]:
print("origin")
[var x, 0]:
print("on the x axis at ", x) |
| Array dengan sisa apa saja | match args:
["move", ..]:
print("move command") |
| Pola dictionary | match item:
{"type": "coin", "value": var v}:
gold += v |
| Guard dengan when (Godot 4.4+) | match score:
var s when s >= 90:
print("A")
var s when s >= 75:
print("B")
_:
print("C") |
Fungsi dan lambda
Fungsi juga merupakan nilai: bisa disimpan, dikirim, dan diikat argumennya.
| Operasi | Sintaks |
|---|---|
| Parameter bertipe dan nilai kembalian | func add(a: int, b: int) -> int:
return a + b |
| Tanpa nilai kembalian | func reset() -> void:
score = 0 |
| Argumen default | func greet(who := "player") -> void:
print("Hi, ", who) |
| Fungsi static | static func double(x: int) -> int:
return x * 2 |
| Lambda satu baris | var square := func(x): return x * x |
| Memanggil Callable | square.call(4) # 16 |
| Fungsi sebagai nilai | var on_done := reset
on_done.call() |
| Mengikat argumen (bind) | var add_ten := add.bind(10)
print(add_ten.call(5)) # 15 |
| Lambda beberapa baris | var greet_all := func(names: Array) -> void:
for n in names:
print("Hi, ", n) |
| Menunggu timer | await get_tree().create_timer(1.0).timeout |
| Menunggu coroutine | var data = await fetch_data() |
String
Method string mengembalikan string baru dan tidak pernah mengubah aslinya.
| Operasi | Sintaks |
|---|---|
| Format dengan % | "%s has %d HP" % [name, hp] |
| Dua angka desimal | "%.2f" % 3.14159 # "3.14" |
| Format dengan placeholder bernama | "{a} vs {b}".format({"a": 1, "b": 2}) |
| Menggabungkan dengan + | "Score: " + str(score) |
| Panjang | text.length() |
| Huruf besar atau kecil | text.to_upper(), text.to_lower() |
| Memecah menjadi beberapa bagian | "a,b,c".split(",") # ["a", "b", "c"] |
| Menggabungkan bagian-bagian | ", ".join(["a", "b", "c"]) |
| Menghapus spasi di tepi | " hi ".strip_edges() # "hi" |
| Mengganti teks | text.replace("cat", "dog") |
| Mencari posisi | text.find("lo") # -1 if missing |
| Diawali atau diakhiri dengan | text.begins_with("Hi"), text.ends_with("!") |
| Substring | text.substr(0, 5) |
| Mengandung teks | "ell" in "Hello" # true |
Array
Array bisa bertambah dan berkurang. Array bertipe hanya menerima tipe elemennya.
| Operasi | Sintaks |
|---|---|
| Literal array (tipe campuran) | var items = [1, "two", 3.0] |
| Array bertipe | var scores: Array[int] = [10, 20, 30] |
| Membaca lewat indeks (negatif dihitung dari akhir) | scores[0], scores[-1] |
| Menambah di akhir | scores.append(40), scores.push_back(40) |
| Menyisipkan di sebuah indeks | scores.insert(0, 5) |
| Menghapus dan mengembalikan elemen terakhir | var last = scores.pop_back() |
| Menghapus berdasarkan nilai atau indeks | scores.erase(20), scores.remove_at(0) |
| Mengandung, indeks dari | scores.has(30), scores.find(30) |
| Panjang, pemeriksaan kosong | scores.size(), scores.is_empty() |
| Mengurutkan | scores.sort() |
| Mengurutkan dengan aturanmu sendiri | enemies.sort_custom(func(a, b): return a.hp < b.hp) |
| Map | scores.map(func(x): return x * 2) |
| Filter | scores.filter(func(x): return x > 15) |
| Reduce | scores.reduce(func(acc, x): return acc + x, 0) |
| Slice (ujung akhir tidak termasuk) | scores.slice(1, 3) |
Dictionary
Pasangan key dan value. Key bisa bertipe apa saja; string adalah yang paling umum.
| Operasi | Sintaks |
|---|---|
| Literal dictionary | var stats = {"hp": 100, "mp": 30} |
| Dictionary bertipe (Godot 4.4+) | var prices: Dictionary[String, int] = {"sword": 50} |
| Membaca atau menulis key | stats["hp"], stats["xp"] = 50 |
| Membaca dengan nilai default | stats.get("luck", 0) |
| Punya key tertentu | stats.has("hp"), "hp" in stats |
| Menghapus key | stats.erase("mp") |
| Key dan value | stats.keys(), stats.values() |
| Jumlah entri | stats.size() |
| Menggabungkan dictionary lain (true menimpa) | stats.merge({"luck": 5}), stats.merge(bonus, true) |
| Perulangan atas key | for key in stats:
print(key, " = ", stats[key]) |
Class dan anotasi
Setiap script adalah class. Anotasi diawali dengan @.
| Operasi | Sintaks |
|---|---|
| Memberi class nama global | class_name Player
extends CharacterBody2D |
| Constructor | func _init(start_hp := 100) -> void:
hp = start_hp |
| Membuat instance | var p := Player.new() |
| Class di dalam class (inner class) | class Item:
var name := ""
var price := 0 |
| Memanggil versi induk dari method ini | func _ready() -> void:
super()
print("child ready") |
| Memanggil method induk yang lain | super.take_damage(10) |
| Variabel static (Godot 4.1+) | static var count := 0 |
| Menampilkan di Inspector | @export var speed := 300.0 |
| Menampilkan dengan rentang slider | @export_range(0, 100) var volume := 50 |
| Mengambil node anak saat siap | @onready var sprite: Sprite2D = $Sprite2D |
| Setter dan getter | var hp := 100:
set(value):
hp = clampi(value, 0, 100)
get:
return hp |
| Menjalankan script di editor | @tool |
Signal
Signal adalah first-class: deklarasikan, lalu emit, connect, dan await secara langsung.
| Operasi | Sintaks |
|---|---|
| Mendeklarasikan signal | signal died |
| Signal dengan argumen bertipe | signal health_changed(old_hp: int, new_hp: int) |
| Emit | died.emit() |
| Emit dengan argumen | health_changed.emit(100, 80) |
| Connect ke sebuah method | player.died.connect(_on_player_died) |
| Connect ke lambda | button.pressed.connect(func(): print("Clicked")) |
| Mengirim argumen tambahan | button.pressed.connect(_on_pressed.bind("start")) |
| Hanya terpicu sekali | timer.timeout.connect(_on_timeout, CONNECT_ONE_SHOT) |
| Disconnect | player.died.disconnect(_on_player_died) |
| Memeriksa koneksi | player.died.is_connected(_on_player_died) |
| Menunggu signal | await player.died |
Node dan siklus hidup
Callback yang dipanggil Godot pada nodemu, dan pemanggilan yang kamu lakukan pada scene tree.
| Operasi | Sintaks |
|---|---|
| Object dibuat (sebelum masuk tree) | func _init() -> void:
print("created") |
| Node dan anak-anaknya sudah siap | func _ready() -> void:
print("ready") |
| Setiap frame | func _process(delta: float) -> void:
position.x += 100.0 * delta |
| Setiap tick fisika | func _physics_process(delta: float) -> void:
velocity.y += 980.0 * delta
move_and_slide() |
| Input yang tidak dipakai UI | func _unhandled_input(event: InputEvent) -> void:
if event.is_action_pressed("jump"):
jump() |
| Mengambil node lewat path | get_node("Sprite2D"), $Sprite2D |
| Path dengan spasi, nama unik | $"UI/Health Bar", %HealthBar |
| Memeriksa input action | Input.is_action_pressed("move_right") |
| Membuat instance dari sebuah scene | var enemy := preload("res://enemy.tscn").instantiate()
add_child(enemy) |
| Menghapus node dengan aman | queue_free() |
| Induk dan anak | get_parent(), get_children() |
| Mengganti scene | get_tree().change_scene_to_file("res://main.tscn") |
Sintaks GDScript yang sering kamu pakai saat membuat game Godot, dalam satu halaman. Cheat sheet GDScript ini adalah referensi cepat untuk Godot 4: variabel dan tipe statis, operator, alur kontrol dan match, fungsi dan lambda, string, array dan dictionary, class, signal, serta callback node yang dijalankan Godot setiap frame.
Semua yang ada di sini adalah sintaks Godot 4, jadi kamu akan melihat @export, @onready, died.emit(), dan await, bukan bentuk Godot 3. Salin yang kamu butuhkan ke scriptmu, atau coba potongan kode bahasanya langsung di playground GDScript: taruh di dalam _ready() dan jalankan di browsermu, tanpa perlu menginstal Godot.
FAQ cheat sheet GDScript
Apakah cheat sheet GDScript ini gratis?
Ya. Cheat sheet GDScript ini sepenuhnya gratis, tanpa perlu daftar. Simpan di bookmark dan kembali kapan pun kamu butuh sintaks yang tepat untuk signal, pola match, atau method array.
Apakah cheat sheet ini untuk Godot 4 atau Godot 3?
@export dan @onready sebagai ganti kata kunci export dan onready, died.emit() dan died.connect(callable) sebagai ganti emit_signal("died") dan connect berbasis string, await sebagai ganti yield, dan super() sebagai ganti .method(). Baris yang ditandai 4.1+, 4.2+, atau 4.4+ membutuhkan minimal versi Godot tersebut.Apa perbedaan = dan := di GDScript?
var x = 5 membuat variabel dinamis yang nantinya bisa berisi tipe apa saja. var x := 5 menyimpulkan tipe dari nilainya (di sini int) lalu menguncinya, jadi mengisinya dengan string nanti akan menjadi error. var x: int = 5 menyatakan tipenya secara eksplisit. Tipe statis memberimu error langsung di editor, autocompletion yang lebih baik, dan kode yang lebih cepat.Bagaimana cara kerja signal di GDScript?
signal died, kirim dengan died.emit(), dan tanggapi dari node lain dengan player.died.connect(_on_player_died). Kamu bisa menghubungkan (connect) lambda sebagai ganti method, mengikat argumen tambahan dengan .bind(), atau menjeda fungsi sampai signal terpicu dengan await player.died.Apakah GDScript mirip Python?
for ... in, if/elif/else, serta kata-kata bahasa Inggris seperti and, or, dan not. Tetapi GDScript adalah bahasa tersendiri yang dibuat untuk Godot. GDScript punya tipe statis opsional, signal, anotasi seperti @export, dan akses langsung ke node dengan $.Bisakah saya berlatih GDScript secara online?
_ready() dijalankan sekali. Kalau kamu ingin belajar terarah, kursus GDScript interaktif gratis dari Coddy membawamu dari variabel dan fungsi sampai class dan signal, langkah demi langkah.