Belajar Godot - Custom Tools & Editor Plugins
Episode 15 of 23

Belajar Godot - Custom Tools & Editor Plugins

Memperluas editor Godot agar bekerja untuk kalian: membuat EditorPlugin, script bertanda @tool yang berjalan di dalam editor, custom inspector dengan EditorInspectorPlugin, hingga automasi asset pipeline dan utilitas editor yang bisa dipakai ulang di seluruh tim.

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

Pendahuluan

Di episode 14 kalian membuat game yang cepat dan terukur. Sekarang saatnya mempercepat sisi lain: workflow kalian sendiri. Godot berbeda dari banyak engine — seluruh editor dibangun di atas node yang sama dengan game kalian, sehingga kalian bisa menulis alat sendiri yang berjalan di dalam editor. Episode 15 membahas custom tools & editor plugins.

Roadmap episode ini: anatomi EditorPlugin, membuat menu dan panel editor pertama, script bertanda @tool yang berjalan di editor, custom inspector dengan EditorInspectorPlugin, automasi asset pipeline, dan menutup dengan pola utilitas editor yang bisa dipakai ulang.

Anatomi EditorPlugin

Semua ekstensi editor berakar pada satu kelas: EditorPlugin. Ia adalah titik masuk ke editor: dari sana kalian bisa menambah menu, membuat dock panel, mendaftarkan inspector plugin, dan menyambungkan ke signal editor. Plugin dideklarasikan lewat file plugin.cfg di folder addons/:

File plugin.cfg yang mendaftarkan plugin
[plugin]
 
name="Level Builder"
description="Alat untuk menyusun level lebih cepat"
author="Arman Dwi Pangestu"
version="1.0"
script="plugin.gd"

Setelah file ini dibuat dan scriptnya terisi, aktifkan plugin lewat menu Project → Project Settings → Plugins. Godot memuat dan menjalankan script tersebut di dalam editor. Dua fungsi wajibnya adalah _enter_tree dan _exit_tree:

PythonKerangka EditorPlugin
@tool
extends EditorPlugin
 
func _enter_tree() -> void:
    add_tool_menu_item("Buat Level Baru", _buat_level)
 
func _exit_tree() -> void:
    remove_tool_menu_item("Buat Level Baru")
_enter_tree dipanggil saat plugin aktif

add_tool_menu_item menambahkan entri ke menu Tool di editor. Karena plugin berjalan di dalam editor, ia punya akses ke EditorInterface — gerbang menuju scene yang sedang terbuka, FileSystem, dan banyak lagi.

Membuat Dock Panel Sendiri

Tool menu cukup untuk aksi sekali klik, tetapi untuk alat yang dipakai berulang kali, buatlah dock panel — jendela yang bisa disematkan di samping editor. Prosesnya: buat scene UI biasa, simpan sebagai panel.tscn, lalu daftarkan lewat add_control_to_dock:

PythonMendaftarkan panel kustom sebagai dock
@tool
extends EditorPlugin
 
var panel: Control
 
func _enter_tree() -> void:
    panel = preload("res://addons/level_builder/panel.tscn").instantiate()
    add_control_to_dock(DOCK_SLOT_LEFT_UL, panel)
 
func _exit_tree() -> void:
    if panel:
        remove_control_from_dock(panel)
        panel.queue_free()
Dock bisa ditempatkan kiri atau kanan editor

Karena panel hanyalah node Control biasa, kalian membangunnya persis seperti UI game: tombol, label, dan container. Perbedaannya, ia hidup di dalam editor dan bisa membaca scene yang sedang dibuka lewat EditorInterface.

Tool Script: Berjalan di Dalam Editor

Fitur paling ampuh Godot untuk tooling adalah script bertanda @tool (di Godot 3, kata kuncinya adalah tool). Script biasa hanya berjalan saat game berjalan; script @tool juga dieksekusi di dalam editor. Ini membuka pintu untuk node yang menghitung visualnya sendiri saat scene dibuka.

Contoh klasik: node penanda yang menggambar lingkaran radiusnya langsung di editor, sehingga desainer level melihat area tanpa menjalankan game:

PythonNode @tool yang menggambar gizmo di editor
@tool
extends Node2D
 
@export var radius: float = 100.0
 
func _ready() -> void:
    if Engine.is_editor_hint():
        queue_redraw()
 
func _draw() -> void:
    draw_circle(Vector2.ZERO, radius, Color(0.4, 0.8, 1.0, 0.3))
_draw dipanggil di editor karena @tool

Pola Engine.is_editor_hint() wajib dikuasai: ia memberi tahu kalau script sedang dijalankan di editor. Gunakan untuk melindungi kode yang hanya masuk akal saat game berjalan — seperti mengakses autoload atau input — agar editor tidak error ketika membuka scene.

Info

Saat membuat script @tool, selalu tanya: apakah fungsi ini perlu berjalan di editor atau cukup saat game? Kode @tool yang berhati-hati (dilindungi is_editor_hint()) menyelamatkan tim dari error editor yang membingungkan.

Custom Inspector dengan @export_custom

Sering kali yang kalian butuhkan bukan panel besar, melainkan kontrol yang lebih baik di Inspector. @export_custom memungkinkan kalian menyediakan control sendiri untuk properti:

PythonExport custom dengan range berbasis enum
@export_custom(ProceduralType)
var tipe: ProceduralType = ProceduralType.HILL
 
func _validate_property(property: Dictionary) -> void:
    if property.name == "tipe":
        property.hint = PROPERTY_HINT_ENUM
        property.hint_string = "Bukit, Lembah, Gunung"
Editor menampilkan dropdown, bukan angka acak

_validate_property memberi kalian kendali penuh atas tampilan properti di Inspector. Untuk kontrol yang benar-benar bebas — slider warna, grafik, tombol aksi — gunakan EditorInspectorPlugin: buat subclass, daftarkan via add_inspector_plugin(), lalu di parse_property kalian bisa menambahkan control kustom ke Inspector node mana pun yang tipenya sesuai.

Automasi Asset Pipeline

Editor plugin juga bisa menjadi otomasi pipeline: pekerjaan berulang yang seharusnya tidak dilakukan manual. Pola yang umum adalah memproses asset saat diimpor. Godot menyediakan signal filesystem_changed dan scene_imported, yang bisa kalian sambungkan dari plugin untuk menjalankan langkah pascaproses.

Contoh nyata: sebuah plugin yang membaca semua file konfigurasi level di folder levels/, memvalidasi ID-nya, lalu menulis daftar level ke file JSON saat editor menutup:

PythonMenulis ulang daftar level saat file berubah
func _on_filesystem_changed() -> void:
    var daftar: Array = []
    var dir := DirAccess.open("res://levels")
    if dir:
        for nama in dir.get_files():
            if nama.ends_with(".tscn"):
                daftar.append(nama.trim_suffix(".tscn"))
    var file := FileAccess.open("res://levels/index.json", FileAccess.WRITE)
    file.store_string(JSON.stringify(daftar))
DirAccess dan JSON membuat pipeline sederhana

Dengan pola seperti ini, desainer menambah level tanpa menyentuh kode — plugin yang menjaga index tetap sinkron. Inilah inti workflow automation: menggeser pekerjaan mekanis dari manusia ke editor.

Utilitas Editor yang Bisa Dipakai Ulang

Plugin yang baik tidak hanya menyelesaikan satu masalah; ia menyelesaikan masalah berulang untuk seluruh tim. Beberapa pola yang layak dijadikan plugin:

  • Shortcut generator: menambah menu aksi yang sering dipakai, seperti "tambah material standar" ke semua node terpilih.
  • Batch renaming: mengubah nama node atau file massal sesuai pola.
  • Scene sanity check: plugin yang memindai scene untuk mencari node yang belum disetel atau konfigurasi yang salah.

Agar plugin tetap terawat, simpan di folder addons/ per fitur dan gunakan version control. Struktur yang bersih terlihat seperti ini:

plaintext
addons/level_builder/
├── plugin.cfg
├── plugin.gd
└── panel.tscn

Penutup

Kalian sekarang bisa memperluas editor Godot: EditorPlugin sebagai titik masuk untuk menu, dock, dan inspector, script @tool yang berjalan di editor untuk visualisasi langsung, @export_custom dan EditorInspectorPlugin untuk kontrol Inspector yang rapi, automasi asset pipeline lewat signal editor dan file IO, serta pola plugin kecil yang bisa dipakai ulang oleh seluruh tim.

Inti yang harus dibawa pulang:

  • Plugin dimulai dari plugin.cfg dan script extends EditorPlugin di folder addons/.
  • Dock panel adalah Control biasa yang didaftarkan lewat add_control_to_dock.
  • @tool menjalankan script di editor; Engine.is_editor_hint() melindungi kode yang hanya untuk game.
  • @export_custom dan EditorInspectorPlugin memberi kontrol penuh atas Inspector.
  • Automasi pipeline (memvalidasi dan menulis index) menggeser pekerjaan mekanis dari manusia.

Di episode 16, kalian menyentuh lapisan paling visual dari game: shaders & visual effects — bahasa shader Godot dan material workflow, fragment shader untuk 2D, spatial material untuk 3D, hingga kombinasi shader dengan particle untuk VFX yang memukau. Semua efek keren yang kalian lihat di game komersial mulai dari satu file shader.

Belajar Godot - Custom Tools & Editor Plugins | Belajar Godot