Membedah arsitektur Godot dari dalam: scene tree dan arsitektur node, sistem resource yang reusable, scene inheritance untuk penurunan komponen, signal system sebagai komunikasi antar node, scripting API, hingga export templates dan dukungan platform.

Selamat datang di episode 2 series Belajar Godot. Di episode 1 kita membahas sejarah, filosofi open source, dan keunggulan Godot dibanding engine lain. Sekarang kita masuk ke jantung arsitekturnya — konsep yang akan menjadi bahasa pemikiran kalian selama mengembangkan game.
Satu penekanan penting: kalian tidak akan "menulis game" di Godot seperti menulis program biasa. Kalian akan menyusun scene dari kumpulan node, lalu menghubungkannya lewat signal. Memahami arsitektur ini di awal akan menyelamatkan kalian dari kebingungan besar di episode-episode berikutnya. Roadmap: scene tree dan node, resource system, scene inheritance, signal system, hingga export templates.
Di Godot, hampir semua hal adalah node — karakter, kamera, suara, tombol UI, semuanya node. Node disusun dalam pohon hierarki yang disebut scene tree, dengan satu node root dan anak-anak yang bercabang. Setiap scene yang kalian buat sebenarnya adalah salah satu cabang dari scene tree ini; saat game berjalan, seluruh scene aktif digabung menjadi satu tree raksasa.
Cara terbaik memahami struktur ini adalah langsung membacanya:
GameRoot (Node2D)
├── Player (CharacterBody2D)
│ ├── CollisionShape2D
│ └── Sprite2D
├── Enemies (Node2D)
│ └── Enemy (CharacterBody2D)
└── Camera (Camera2D)Posisi node dalam tree menentukan banyak hal: node anak mengikuti transformasi node induk, dan peristiwa _ready dipanggil berurutan dari parent ke child. Hierarchy inilah yang membuat Godot sangat visual dan mudah dirayakan.
Perlu digarisbawahi: scene tree adalah konsep runtime, bukan hanya tatanan di editor. Saat game berjalan, seluruh scene aktif — karakter, level, UI — masuk ke satu scene tree global yang bisa diakses dari kode mana pun lewat get_tree(). Ini adalah jembatan yang menghubungkan script, node, dan scene satu sama lain.
Jika node adalah "objek" di dalam game, resource adalah data yang dimuat node. Sprite texture, suara, material, font — semua resource. Bedanya: resource bersifat reusable dan shareable. Satu resource bisa dipakai banyak node, dan mengubah resource sekali akan terlihat di semua pemakainya.
Contoh paling nyata: sebuah texture sprite yang sama bisa dipakai oleh ratusan musuh tanpa menduplikasi data di memori. Di dalam project, resource disimpan sebagai file seperti .png, .wav, atau .tres (text resource). Godot juga mendukung resource buatan sendiri lewat kata kunci extends Resource — dasar dari sistem statistik, item, atau kartu dalam game kalian nanti.
Sebuah resource buatan disimpan sebagai file teks yang bisa kalian baca langsung. Contoh file .tres untuk data statistik karakter:
[gd_resource type="Resource" script_class="Statistik" load_steps=2]
[ext_resource type="Script" path="res://scripts/statistik.gd" id="1"]
[resource]
script = ExtResource("1")
nyawa = 100
serangan = 10File semacam ini bisa dibuat di editor maupun ditulis tangan, dan nilainya bisa diubah kapan saja tanpa menyentuh kode. Saat episode 4 dan 9 kita akan memakai pola ini untuk data item dan save/load game.
Konsep paling kuat di Godot adalah scene inheritance. Kalian bisa membuat scene dasar (misalnya musuh generik), lalu menurunkannya menjadi scene baru yang mewarisi seluruh struktur, properti, dan script-nya. Ubah scene induk, semua turunannya ikut berubah. Ini adalah pola reuse yang membuat project besar tetap terpelihara.
Ada dua macam reuse di Godot:
Musuh diturunkan menjadi MusuhTerbang dengan properti kecepatan dan tipe serangan yang berbeda.Di editor, scene turunan dibuat dengan klik kanan pada scene di FileSystem lalu memilih New Inherited Scene. Yang menarik, scene turunan tidak menyimpan salinan lengkap struktur induknya — ia hanya menyimpan perbedaannya. Ini membuat project tetap hemat dan perubahan di induk langsung menyebar ke semua turunan.
Kombinasi keduanya memungkinkan kalian membangun perpustakaan komponen yang saling menyusun seperti Lego — pola yang akan kita praktikkan detail di episode 4.
Komunikasi antar node adalah teka-teki klasik di game engine. Godot menyelesaikannya dengan signal — sistem event yang sangat sederhana: sebuah node mengirim signal, dan node lain boleh mendengarkan serta bereaksi. Tidak perlu node saling tahu satu sama lain secara langsung; hanya perlu terhubung lewat signal.
Contoh deklarasi dan pemakaian signal dalam GDScript:
signal skor_berubah(nilai: int)
var skor := 0
func tambah_poin(jumlah: int) -> void:
skor += jumlah
skor_berubah.emit(skor)Signal bisa dideklarasikan sendiri, tapi ribuan signal bawaan sudah disediakan node — misalnya body_entered untuk deteksi tabrakan atau pressed untuk tombol UI. Di atas signal ini, Godot juga menyediakan scripting API lengkap: setiap node bisa diakses dan dimodifikasi lewat script, dengan properti seperti position, rotation, dan scale.
Menghubungkan signal bisa dilakukan lewat tab Node di Inspector, atau langsung di kode:
func _ready() -> void:
$TombolMulai.pressed.connect(_on_mulai_ditekan)
func _on_mulai_ditekan() -> void:
print("Game dimulai")Kedua cara menghasilkan hal yang sama; yang lewat kode lebih fleksibel karena bisa dikondisikan. Perhatikan bahwa method penerima ditulis tanpa kurung saat di-pass ke .connect — kalian melempar referensi, bukan hasil pemanggilan.
Godot mendukung ekspor ke banyak platform, dan mekanisme di baliknya adalah export templates — kumpulan binary runtime yang diunduh terpisah untuk setiap platform target. Di Project Settings, kalian memilih platform, memilih template yang sesuai, lalu Godot menggabungkan project kalian dengan template tersebut menjadi aplikasi yang bisa dijalankan.
Dukungan platform Godot 4 meliputi Windows, Linux, macOS, Android, iOS, dan web (HTML5). Setiap platform punya pengaturan tambahan: keystore untuk Android, entitlements untuk iOS, dan sebagainya. Kita akan praktikkan ekspor nyata di episode 3 dan episode 14, jadi cukup pahami konsepnya sekarang: template diunduh sekali, project bisa dikirim ke mana saja.
Info
Export template juga dipakai oleh mode "remote debug" — saat kalian menekan tombol play di editor, Godot menjalankan template berisi project kalian secara lokal. Inilah alasan tombol play langsung bekerja tanpa langkah tambahan.
Arsitektur Godot bisa diringkas dalam satu kalimat: semuanya node, data adalah resource, komunikasi lewat signal, dan reuse lewat instancing serta inheritance. Scene tree menyusun node secara hierarkis, resource dibagikan tanpa duplikasi, scene inheritance menjaga project tetap terpelihara, dan signal membuat node saling berkomunikasi tanpa saling menggenggam. Export templates menyegel semua itu ke platform mana pun.
Inti yang harus dibawa pulang:
Di episode 3 berikutnya, kita mulai praktik: instalasi Godot, membuat project baru, memahami editor layout, resource folders, project settings, hingga menjalankan project untuk pertama kalinya. Siapkan komputer kalian, karena mulai sekarang kita kerja dengan tangan di atas editor!