Menu
CoddyTech

Cheat Sheet GDScript

Terakhir diperbarui

Dasar dan output

Sebuah script memperluas (extends) tipe node, dan Godot memanggil fungsi-fungsinya untukmu.

OperasiSintaks
Menempelkan script ke tipe nodeextends Node
Kode yang dijalankan saat node dimulaifunc _ready() -> void: print("Hello, World!")
Mencetak nilai tanpa pemisahprint("HP: ", hp)
Mencetak nilai yang dipisahkan spasiprints("a", "b", 3)
Komentar# This is a comment
Komentar dokumentasi## Shown in the editor's help
String beberapa barisvar text := """Line one Line two"""
Melaporkan errorpush_error("Health is negative")
Melaporkan peringatanpush_warning("Old save file")

Variabel, konstanta dan tipe

Tipe bersifat opsional. Tambahkan untuk pemeriksaan di editor, autocompletion, dan kode yang lebih cepat.

OperasiSintaks
Variabel (tipe dinamis)var score = 0
Variabel dengan tipe statisvar speed: float = 200.0
Menyimpulkan tipe statisvar lives := 3
Konstantaconst MAX_HP = 100
Enumenum State { IDLE, RUN, JUMP }
Memakai nilai enumvar state: State = State.IDLE
Nilai vector dan warnavar pos := Vector2(10, 20) var tint := Color(1, 0, 0)
Reference object kosongvar target: Node = null
Mengonversi ke teks, int, atau floatstr(42), int("42"), float("3.5")
Float ke int (desimalnya dibuang)int(3.9) # 3
Memeriksa tipevalue is int, node is Sprite2D
Cast ke sebuah tipevar sprite := node as Sprite2D

Operator

Matematika yang sudah kamu kenal, ditambah kata-kata bahasa Inggris untuk logika.

OperasiSintaks
Tambah, kurang, kali, bagia + b, a - b, a * b, a / b
Pembagian bilangan bulat (int / int)7 / 2 # 3
Sisa bagi7 % 3, fmod(7.5, 2.0)
Pangkat2 ** 10 # 1024
Penugasan gabunganx += 1, x -= 1, x *= 2, x /= 2
Perbandingan==, !=, <, >, <=, >=
Logikaa and b, a or b, not a
Logika (bentuk simbol)a && b, a || b, !a
If dalam satu barisvar label := "win" if score > 10 else "lose"
Apakah ada di dalam collection"sword" in inventory
Bitwisea & 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.

OperasiSintaks
If, elif, elseif hp <= 0: die() elif hp < 20: print("Low HP") else: print("OK")
If satu barisif hp <= 0: die()
Perulangan atas rangefor i in range(5): print(i) # 0 to 4
Range dengan awal, akhir, dan langkahfor i in range(10, 0, -2): print(i) # 10, 8, 6, 4, 2
Mengulang sebanyak n kalifor i in 3: print(i) # 0, 1, 2
Perulangan atas arrayfor item in items: print(item)
Variabel loop bertipe (Godot 4.2+)for n: String in names: print(n.to_upper())
While loopwhile hp > 0: hp -= 10
Keluar dari perulangan atau melewati satu langkahbreak, continue
Placeholder untuk blok kosongpass

Pattern matching (match)

match menjalankan cabang pertama yang polanya cocok. Tidak ada fallthrough.

OperasiSintaks
Mencocokkan nilaimatch state: State.IDLE: print("idle") State.RUN: print("run")
Beberapa nilai dalam satu cabangmatch key: "w", "up": move_up()
Cabang default (wildcard)match n: 0: print("zero") _: print("other")
Mengikat nilai ke sebuah namamatch cmd: "quit": get_tree().quit() var other: print("Unknown: ", other)
Pola arraymatch pos: [0, 0]: print("origin") [var x, 0]: print("on the x axis at ", x)
Array dengan sisa apa sajamatch args: ["move", ..]: print("move command")
Pola dictionarymatch 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.

OperasiSintaks
Parameter bertipe dan nilai kembalianfunc add(a: int, b: int) -> int: return a + b
Tanpa nilai kembalianfunc reset() -> void: score = 0
Argumen defaultfunc greet(who := "player") -> void: print("Hi, ", who)
Fungsi staticstatic func double(x: int) -> int: return x * 2
Lambda satu barisvar square := func(x): return x * x
Memanggil Callablesquare.call(4) # 16
Fungsi sebagai nilaivar on_done := reset on_done.call()
Mengikat argumen (bind)var add_ten := add.bind(10) print(add_ten.call(5)) # 15
Lambda beberapa barisvar greet_all := func(names: Array) -> void: for n in names: print("Hi, ", n)
Menunggu timerawait get_tree().create_timer(1.0).timeout
Menunggu coroutinevar data = await fetch_data()

String

Method string mengembalikan string baru dan tidak pernah mengubah aslinya.

OperasiSintaks
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)
Panjangtext.length()
Huruf besar atau keciltext.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 tekstext.replace("cat", "dog")
Mencari posisitext.find("lo") # -1 if missing
Diawali atau diakhiri dengantext.begins_with("Hi"), text.ends_with("!")
Substringtext.substr(0, 5)
Mengandung teks"ell" in "Hello" # true

Array

Array bisa bertambah dan berkurang. Array bertipe hanya menerima tipe elemennya.

OperasiSintaks
Literal array (tipe campuran)var items = [1, "two", 3.0]
Array bertipevar scores: Array[int] = [10, 20, 30]
Membaca lewat indeks (negatif dihitung dari akhir)scores[0], scores[-1]
Menambah di akhirscores.append(40), scores.push_back(40)
Menyisipkan di sebuah indeksscores.insert(0, 5)
Menghapus dan mengembalikan elemen terakhirvar last = scores.pop_back()
Menghapus berdasarkan nilai atau indeksscores.erase(20), scores.remove_at(0)
Mengandung, indeks dariscores.has(30), scores.find(30)
Panjang, pemeriksaan kosongscores.size(), scores.is_empty()
Mengurutkanscores.sort()
Mengurutkan dengan aturanmu sendirienemies.sort_custom(func(a, b): return a.hp < b.hp)
Mapscores.map(func(x): return x * 2)
Filterscores.filter(func(x): return x > 15)
Reducescores.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.

OperasiSintaks
Literal dictionaryvar stats = {"hp": 100, "mp": 30}
Dictionary bertipe (Godot 4.4+)var prices: Dictionary[String, int] = {"sword": 50}
Membaca atau menulis keystats["hp"], stats["xp"] = 50
Membaca dengan nilai defaultstats.get("luck", 0)
Punya key tertentustats.has("hp"), "hp" in stats
Menghapus keystats.erase("mp")
Key dan valuestats.keys(), stats.values()
Jumlah entristats.size()
Menggabungkan dictionary lain (true menimpa)stats.merge({"luck": 5}), stats.merge(bonus, true)
Perulangan atas keyfor key in stats: print(key, " = ", stats[key])

Class dan anotasi

Setiap script adalah class. Anotasi diawali dengan @.

OperasiSintaks
Memberi class nama globalclass_name Player extends CharacterBody2D
Constructorfunc _init(start_hp := 100) -> void: hp = start_hp
Membuat instancevar p := Player.new()
Class di dalam class (inner class)class Item: var name := "" var price := 0
Memanggil versi induk dari method inifunc _ready() -> void: super() print("child ready")
Memanggil method induk yang lainsuper.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 gettervar 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.

OperasiSintaks
Mendeklarasikan signalsignal died
Signal dengan argumen bertipesignal health_changed(old_hp: int, new_hp: int)
Emitdied.emit()
Emit dengan argumenhealth_changed.emit(100, 80)
Connect ke sebuah methodplayer.died.connect(_on_player_died)
Connect ke lambdabutton.pressed.connect(func(): print("Clicked"))
Mengirim argumen tambahanbutton.pressed.connect(_on_pressed.bind("start"))
Hanya terpicu sekalitimer.timeout.connect(_on_timeout, CONNECT_ONE_SHOT)
Disconnectplayer.died.disconnect(_on_player_died)
Memeriksa koneksiplayer.died.is_connected(_on_player_died)
Menunggu signalawait player.died

Node dan siklus hidup

Callback yang dipanggil Godot pada nodemu, dan pemanggilan yang kamu lakukan pada scene tree.

OperasiSintaks
Object dibuat (sebelum masuk tree)func _init() -> void: print("created")
Node dan anak-anaknya sudah siapfunc _ready() -> void: print("ready")
Setiap framefunc _process(delta: float) -> void: position.x += 100.0 * delta
Setiap tick fisikafunc _physics_process(delta: float) -> void: velocity.y += 980.0 * delta move_and_slide()
Input yang tidak dipakai UIfunc _unhandled_input(event: InputEvent) -> void: if event.is_action_pressed("jump"): jump()
Mengambil node lewat pathget_node("Sprite2D"), $Sprite2D
Path dengan spasi, nama unik$"UI/Health Bar", %HealthBar
Memeriksa input actionInput.is_action_pressed("move_right")
Membuat instance dari sebuah scenevar enemy := preload("res://enemy.tscn").instantiate() add_child(enemy)
Menghapus node dengan amanqueue_free()
Induk dan anakget_parent(), get_children()
Mengganti sceneget_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?
Godot 4. Kedua versi berbeda dalam hal-hal yang membuat kode salinan rusak: Godot 4 memakai anotasi @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?
Deklarasikan signal dengan 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?
Tampilannya mirip: blok ditentukan oleh indentasi, dan GDScript memakai 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?
Bisa. Buka playground GDScript untuk menjalankan potongan kode dari cheat sheet ini di browsermu: playground menempelkan scriptmu ke sebuah node, jadi kode di dalam _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.
Ilustrasi bahasa pemrograman di Coddy

Belajar GDScript bersama Coddy

Mulai