Belajar Godot - Godot for Mobile & Desktop
Episode 17 of 23

Belajar Godot - Godot for Mobile & Desktop

Membawa game ke perangkat nyata: ekspor ke Android, iOS, Windows, Linux, dan macOS dengan export presets, konfigurasi dan input spesifik platform, pola touch dan orientation untuk mobile, hingga pengaturan ukuran paket dan kepatuhan platform.

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

Pendahuluan

Semua sistem game sudah lengkap: animasi, multiplayer, performa, plugin, dan shader. Episode 17 membawa kalian keluar dari editor: mengekspor game ke perangkat nyata. Godot unggul di sini — satu codebase bisa menembus Android, iOS, Windows, Linux, dan macOS. Tapi setiap platform punya kekhasan sendiri: dari konfigurasi, input, sampai aturan toko aplikasi.

Roadmap episode ini: menyiapkan export templates dan preset, mengonfigurasi preset per platform, ekspor desktop (Windows, Linux, macOS), ekspor mobile (Android, iOS), pola input dan orientation untuk layar sentuh, lalu menutup dengan ukuran paket dan kepatuhan platform.

Persiapan: Export Templates dan Preset

Sebelum ekspor, pastikan export templates terpasang — runtime Godot khusus untuk platform tujuan. Di menu Editor → Manage Export Templates, pilih versi yang sama dengan editor kalian, lalu klik Download and Install. Tanpa template, tombol ekspor hanya menampilkan pesan error.

Selanjutnya buat export preset lewat Project → Export. Preset menyimpan semua pengaturan satu platform: target, permission, icon, dan kompresi. Simpan preset sebagai file .preset di dalam project agar bisa di-version-control — seluruh tim dan CI memakai pengaturan yang sama. Satu project bisa punya banyak preset, misalnya android-release dan android-debug.

Ekspor juga bisa diotomasikan dari terminal — ini berguna untuk CI:

Ekspor dari command line
godot --headless --export-release "android-release" build/game.apk
Preset dipakai lewat nama atau indeks

Mengonfigurasi Export Presets

Tiap preset punya tiga bagian yang harus kalian pahami:

  • Export type: pilih debug atau release. Release memakai template yang dioptimalkan dan tanpa tool editor; inilah yang dikirim ke pengguna.
  • Export options: pengaturan spesifik platform — icon, permission, versi, min SDK, dan flags rendering.
  • Resources: kontrol file apa yang ikut terpaket. Godot mengikuti dependensi, tetapi kalian bisa mengecualikan folder yang tidak perlu.

Pilihan rendering juga memengaruhi kompatibilitas: renderer mobile dan compatibility jauh lebih ringan untuk perangkat rendah dibanding forward_plus. Bagi game 2D sederhana di ponsel, renderer compatibility sering menjadi pilihan paling aman.

Desktop: Windows, Linux, dan macOS

Ekspor desktop adalah yang paling sederhana: buat preset per OS, lalu export. Windows memakai template .exe, Linux menghasilkan biner yang bisa dibungkus AppImage atau tar, dan macOS menghasilkan aplikasi .app yang harus ditandatangani untuk distribusi luas.

Beberapa catatan penting:

  • Icon: setiap OS butuh format sendiri — .ico untuk Windows, .png multi-size untuk Linux, .icns untuk macOS. Perbedaan ini kecil tapi sering meloloskan diri dan membuat game terlihat tidak profesional.
  • Path dan permissions: game desktop harus menulis save data di lokasi yang tepat, bukan di folder install. Gunakan user:// untuk menyimpan data pengguna dan OS.get_environment untuk variabel lingkungan.
  • Code signing (Windows) dan notarisasi (macOS) diperlukan agar OS tidak memblokir game. Ini proses eksternal Godot, tetapi wajib dipahami sebelum distribusi luas.

Info

Jangan tunggu akhir project untuk uji ekspor. Buat build desktop sederhana di episode awal dan ekspor seminggu sekali — masalah seperti icon, font, atau path yang hilang jauh lebih murah ditemukan lebih awal. Debug "hanya ada di build" adalah yang paling mahal.

Mobile: Android dan iOS

Mobile membutuhkan persiapan tambahan karena proses ekosistemnya ketat:

  • Android: install Android SDK dan build tools, lalu set path di Editor Settings. Untuk debug, aktifkan Install to device dan pastikan USB debugging aktif. Untuk rilis, kalian butuh keystore (kunci penandatangan) dan mengisi Keystore Config di preset. Kalian juga harus menetapkan min_sdk dan target_sdk sesuai versi Google Play terbaru.
  • iOS: ekspor hanya bisa dilakukan di macOS karena Apple mewajibkan Xcode. Godot mengekspor proyek Xcode, lalu kalian build dan sign di sana. Kalian butuh Apple Developer account, certificate, dan provisioning profile.

Android dan iOS sama-sama menuntut kalian menangani permission dengan hati-hati — hanya minta izin yang benar-benar dipakai, karena toko aplikasi memeriksa permission yang berlebihan.

Input Spesifik Platform: Touch dan Orientasi

Desktop memakai keyboard dan mouse; mobile memakai layar sentuh. Untungnya sistem Input Map dari episode 11 sudah menyatukan keduanya: satu action bisa diisi input keyboard dan touch. Untuk kontrol sentuh virtual, pakai node TouchScreenButton atau buat tombol UI sendiri di atas layar.

Virtual Joystick dan Tombol Layar

Untuk game yang butuh kontrol analog seperti platformer atau top-down shooter, virtual joystick jauh lebih nyaman daripada tombol arah. Buatlah joystick sederhana dari dua node: sebuah lingkaran luar sebagai area sentuh dan lingkaran dalam sebagai knob yang mengikuti jari.

PythonVirtual joystick sederhana
@export var radius_maks: float = 50.0
 
func _unhandled_input(event: InputEvent) -> void:
    if event is InputEventScreenTouch and event.pressed:
        knob.global_position = event.position
    elif event is InputEventScreenDrag:
        var dari_pusat: Vector2 = event.position - pusat.global_position
        knob.global_position = pusat.global_position + dari_pusat.limit_length(radius_maks)
Posisi jari diterjemahkan menjadi arah gerak

Pola ini penting dikuasai karena aplikasi nyata hampir selalu butuh lebih dari satu titik sentuh sekaligus — pemain menggerakkan joystick dengan jempol kiri sambil menekan tombol aksi dengan jempol kanan. Input Map Godot menangani multi-touch dengan baik asalkan setiap kontrol virtual memakai action yang berbeda.

Pola umum untuk menggeser layar:

PythonDeteksi gesekan di layar sentuh
func _unhandled_input(event: InputEvent) -> void:
    if event is InputEventScreenDrag:
        $Player.position += event.relative
    elif event is InputEventScreenTouch and event.pressed:
        $Player.position = event.position
Event input layar digabung dengan posisi

Orientation juga perlu diputuskan lebih awal: landscape untuk game aksi, portrait untuk game kasual. Atur di preset platform (Screen Orientation) dan pertimbangkan bahwa menahan orientasi lebih murah daripada mendukung rotasi dinamis. Di sisi performa, targetkan 60 FPS stabil, matikan fitur yang tidak dipakai (shader berat, efek layar), dan uji dengan battery saver — karena termal dan baterai adalah musuh game mobile.

Ukuran Paket dan Compliance

Dua kekhawatiran terakhir sebelum rilis: ukuran paket dan kepatuhan. Game mobile yang terlalu besar membuat user enggan mengunduh, dan toko aplikasi mematok batas (Google Play maksimal 200 MB untuk APK, dengan asset packs). Cara menekan ukuran:

  • Aktifkan texture compression yang sesuai platform — ini penghemat terbesar, sering kali 50-70 persen.
  • Jangan ikut memakai asset yang tidak dirujuk; bersihkan dengan Resource Manager.
  • Untuk game dengan banyak level, pertimbangkan asset packs atau pengunduhan on-demand daripada memasukkan semuanya di binari.

Compliance menyangkut aturan toko: umur rating, kebijakan privasi, consent untuk iklan, dan deskripsi permission. Untuk game yang mengumpulkan data pengguna — termasuk analytics sederhana — pastikan ada kebijakan privasi dan mekanisme consent yang jelas.

Warning

Ukuran binari hanyalah separuh cerita; waktu load juga bagian dari pengalaman. Paket kecil yang memuat texture tak terkompresi akan tetap terasa lambat. Prioritaskan kompresi texture sejak awal, karena mengubah skema kompresi belakangan bisa mengubah warna visual game kalian.

Penutup

Kalian kini bisa membawa game ke perangkat nyata: menyiapkan export templates dan preset yang di-version-control, mengekspor ke Windows, Linux, macOS dengan pengaturan icon dan signing masing-masing, mengekspor ke Android dan iOS dengan keystore serta Xcode, menangani input sentuh dan orientation untuk mobile, hingga menekan ukuran paket dengan kompresi texture dan memastikan kepatuhan platform.

Inti yang harus dibawa pulang:

  • Export templates harus versi yang sama dengan editor; preset disimpan sebagai .preset agar bisa di-version-control.
  • Renderer compatibility atau mobile lebih aman untuk perangkat rendah dibanding forward_plus.
  • Android butuh keystore untuk rilis; iOS hanya bisa di-build di macOS lewat Xcode.
  • Input Map menyatukan touch dan keyboard; gunakan InputEventScreenDrag dan TouchScreenButton untuk mobile.
  • Kompresi texture adalah penghemat ukuran paket terbesar; kepatuhan butuh kebijakan privasi dan permission yang minimal.

Di episode 18, game kalian siap dibawa ke mana-mana — dan itu memunculkan pertanyaan arsitektur: advanced architecture & patterns, dari pola ECS-inspired dan entity management, sistem yang decoupled dengan signals dan messaging, hingga arsitektur modular dan plugin-based scenes. Karena game yang besar tidak menang karena fitur, melainkan karena fondasi.

Belajar Godot - Godot for Mobile & Desktop | Belajar Godot