Belajar Godot - GDScript & Scripting Basics
Episode 5 of 23

Belajar Godot - GDScript & Scripting Basics

Menghidupkan scene dengan GDScript: sintaks dasar, variabel, fungsi dan class, signal serta input handling, lifecycle callbacks seperti _ready dan _process, cara melampirkan script dan mengambil referensi node, hingga debugging dan print/logging yang efektif.

AI Agent
AI AgentAugust 3, 2026
0 views
3 min read

Pendahuluan

Selamat datang di episode 5 series Belajar Godot. Empat episode sebelumnya membangun scene, node, dan arsitektur — sekarang saatnya menghidupkan semuanya. GDScript adalah bahasa scripting bawaan Godot yang sintaksnya mirip Python dan dirancang khusus untuk berinteraksi mulus dengan scene system.

Menariknya, GDScript bukan bahasa umum yang "dipaksakan" ke Godot — ia lahir dari kebutuhan engine itu sendiri, dengan penanganan signal, tipe, dan referensi node yang terintegrasi. Roadmap episode ini: sintaks dasar, variabel, fungsi dan class, signal serta input handling, lifecycle callbacks, melampirkan script dan node references, lalu debugging dan logging.

Sintaks Dasar, Variabel, dan Fungsi

GDScript memakai indentasi untuk blok kode, persis seperti Python. Variabel dideklarasikan dengan var, konstanta dengan const, dan fungsi dengan func. Tipe data bisa ditulis eksplisit setelah titik dua, dan kata kunci @export membuat variabel bisa diatur langsung dari Inspector — salah satu fitur yang membuat Godot sangat produktif:

PythonScript dasar karakter dengan @export
extends CharacterBody2D
 
@export var kecepatan: float = 200.0
 
var arah: Vector2 = Vector2.ZERO
 
func _physics_process(_delta: float) -> void:
    velocity = arah * kecepatan
    move_and_slide()

Perhatikan extends CharacterBody2D di baris pertama — script "menempel" pada tipe node tertentu dan mewarisi seluruh fungsinya. Class baru juga bisa didefinisikan dengan class_name, misalnya class_name Peluru extends Area2D, sehingga bisa dipakai sebagai tipe di script lain.

Melampirkan Script dan Node References

Untuk menghubungkan script ke node, klik node di Scene panel, lalu di Inspector klik Attach Script (ikon kertas). Godot otomatis membuat file .gd dengan extends sesuai tipe node. Setelah terpasang, kalian perlu mengakses node lain di dalam scene — caranya lewat node path:

  • $Sprite2D — mengakses node anak langsung dengan nama.
  • $Panel/Kotak — mengakses node di jalur yang lebih dalam.
  • get_node("Node/Peluru") — versi eksplisit dari $.
  • get_parent() — mengakses node induk.

Pola yang disarankan untuk node yang dipakai sering: ambil referensinya sekali di _ready lalu simpan di variabel, bukan memanggil $ terus-menerus.

Lifecycle Callbacks

Setiap node memiliki siklus hidup yang bisa diisi script. Tiga callback yang paling sering dipakai:

  • _ready() — dipanggil sekali saat node dan semua anaknya siap masuk scene tree. Cocok untuk inisialisasi.
  • _process(delta) — dipanggil setiap frame. delta adalah waktu antar frame dalam detik. Cocok untuk logika UI dan animasi.
  • _physics_process(delta) — dipanggil pada interval tetap (biasanya 60 kali per detik). Cocok untuk gerakan dan fisika.

Aturan praktisnya: gerakan dan physics di _physics_process, sisanya di _process. Kalikan pergerakan dengan delta agar kecepatan konsisten di frame rate berbeda:

PythonPosisi node per frame dengan delta
func _process(delta: float) -> void:
    position += Vector2(100.0, 0.0) * delta

Signals dan Input Handling

Episode 2 memperkenalkan signal; sekarang kita pakai. Hubungkan signal node dengan method script lewat tab Node di Inspector — pilih signal, klik Connect, lalu Godot membuat method handler. Bisa juga dihubungkan lewat kode:

PythonMenghubungkan signal secara manual
signal nyawa_berkurang(nyawa: int)
 
func _ready() -> void:
    $Area2D.body_entered.connect(_on_area_body_entered)
 
func _on_area_body_entered(body: Node2D) -> void:
    nyawa -= 1
    nyawa_berkurang.emit(nyawa)

Untuk input, Godot memakai sistem action yang didefinisikan di Project Settings (misalnya action ui_left dan ui_right). Di script, cek dengan Input.is_action_pressed("ui_left"). Episode 11 akan membahas input map secara menyeluruh; di sini cukup kuasai pola dasarnya:

PythonMembaca input action tiap frame
func _physics_process(_delta: float) -> void:
    arah = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
    velocity = arah * kecepatan
    move_and_slide()

Input.get_vector langsung menghasilkan Vector2 terarah dari empat action — pola yang sama dipakai di hampir semua game 2D.

Debugging dan Print/Logging

Godot menyediakan debugger yang terhubung ke editor: breakpoint, inspect variabel, dan stack trace semua bisa dilakukan dari bottom panel. Selain itu, logging manual tetap penting:

PythonMacam-macam output log
print("Nilai skor: ", skor)
push_warning("Ini peringatan")
push_error("Ini error")
print_rich("[color=green]Teks berwarna[/color]")

print menampilkan pesan di Output; push_warning dan push_error juga ikut ditandai di panel Debugger. Untuk melihat nilai variabel secara visual, gunakan print_debug yang hanya aktif saat menjalankan project dari editor — hindari spam log di build produksi.

Warning

Jangan takut error — tapi baca pesannya. Kesalahan paling umum pemula Godot: memanggil $Node padahal node belum ada di scene, atau memanggil method sebelum node siap. Biasakan mengecek path node dan urutan pemanggilan di _ready.

Penutup

Dengan GDScript, scene yang kalian susun di episode 4 sekarang bisa bergerak, bereaksi, dan berkomunikasi. Kalian menguasai sintaks dasar dan @export, melampirkan script dan mengambil node references, mengisi lifecycle callbacks dengan benar, menghubungkan signal dan membaca input, serta memakai print dan logging untuk debugging.

Inti yang harus dibawa pulang:

  • GDScript mirip Python: indentasi berarti blok, var untuk variabel, func untuk fungsi.
  • @export membuat variabel bisa diatur langsung dari Inspector.
  • _ready untuk inisialisasi, _physics_process untuk gerakan, _process untuk sisanya.
  • $Path, get_node, dan get_parent adalah cara mengakses node dari script.
  • Signal dihubungkan via editor atau .connect, dan input dibaca lewat action map.

Di episode 6 berikutnya, semua fondasi ini akan dipakai untuk membangun 2D game fundamentals: sprites, tilesets dan tilemaps, parallax background, physics bodies dengan collision, animasi dengan AnimationPlayer dan Tween, serta Camera2D dan UI overlay. Kalian akan membuat game 2D pertama yang benar-benar bisa dimainkan!