October 30, 2026
Catatan Pinggir Seorang Game Developer: Di Balik Bug Jaringan, UI Gaib, dan Tragedi Bom Multiplayer
Mengembangkan game multiplayer sering kali menjanjikan pengalaman gamedev yang keren: membayangkan dua pemain bertarung secara real-time…
By Muhammad Aryo Tobiansyah
2 min read
Mengembangkan game multiplayer sering kali menjanjikan pengalaman gamedev yang keren: membayangkan dua pemain bertarung secara real-time dari tempat berbeda. Namun, kenyataan di balik editor Unity terkadang tidak seindah impian tersebut.
Berikut adalah kisah "duka" teknis — yang akhirnya berhasil dijinakkan — dalam perjalanan membereskan mekanik game multiplayer berbasis Photon Network (PUN2).
Bab 1: Misteri Room List yang Menghilang dan Pintu Room yang Terkunci
Kisah bermula saat pengujian koneksi jaringan. Host (Player 1) berhasil membuat room dengan status IsVisible = true dan skrip OnRoomListUpdate sudah terpasang rapi di logika jaringan. Namun, saat Player 2 masuk ke lobby, layar daftar kamar tetap kosong melompong.
Setelah penelusuran sengit di Inspector Unity:
- UI Nyasar: Referensi
roomPaneldi skrip ternyata tidak mengarah ke panelWaitingRooms, melainkan nyangkut di komponenScrollView. - Kamar Terkunci Kepagian: Saat Host menekan tombol mulai, sistem secara otomatis mengubah status kamar menjadi
IsOpen = false. Akibatnya, pemain lain sama sekali tidak bisa lagi menemukan apalagi bergabung ke room tersebut.
Solusi: Referensi UI ditautkan kembali ke tempat yang benar, dan logika penutupan room otomatis dihapus agar ruang permainan tetap menerima pemain selama slot masih mencukupi.
(Catatan debug: Jika isu ini muncul kembali, pastikan App ID, Region, dan gameVersion Photon di kedua client benar-benar identik).
Bab 2: Input System Berontak dan Skala UI (0, 0, 0) yang Gaib
Tidak berhenti di masalah jaringan, sistem kontrol game ikut "merajok" saat proyek diperbarui.
- Exception Input System: Skrip
PlayerController2Dlama masih memanggil fungsi legendarisInput.GetAxisRaw. Karena proyek sudah bermigrasi ke Package Input System baru, Unity melontarkan console error/exception bertubi-tubi.
Fix: Pembacaan input dirombak total menggunakan InputAction dengan binding lengkap untuk WASD, tombol panah, serta stik kiri gamepad.
- UI Menguap di Layar: Saat berpindah ke
LobbyScenedanGameScene2D, seluruh tampilan antarmuka mendadak hilang tanpa jejak. Ternyata, komponenCanvastersimpan secara tidak sengaja dengan skala(0, 0, 0).
Fix: Skala Canvas dikembalikan ke ukuran normal (1, 1, 1), dan referensi teks status game dihubungkan kembali. Pengumuman sistem (announcement) juga dipasang logika auto-create saat runtime jika belum di-assign.
Bab 3: Drama Bom Mengudara dan Ketidaksinkronan Host vs Client
Masalah paling krusial terjadi pada gameplay loop utama (mekanik bom):
- State Bom yang "Desync": Walaupun perpindahan scene sudah dipaksa menggunakan
PhotonNetwork.AutomaticallySyncScenedanPhotonNetwork.LoadLevel, ronde permainan sering kali sudah keburu dimulai sebelum prefab pemain milik Player 2 selesai di-spawn secara sempurna.
Fix: Jalur logika diubah; Host wajib menunggu seluruh player controller siap di arena sebelum memulai ronde, dan client akan menunda penerapan state bom sampai komponen controller milik mereka terdeteksi secara utuh.
- Skrip Bom yang Mati Suri: Mekanik ledakan/penempelan bom gagal berfungsi sama sekali karena komponen
BombTagControllerdipasang di child object berupa ikon bom yang statusnya sedang nonaktif (disabled).
Fix: Skrip dipindahkan ke root object karakter pemain yang selalu aktif selama permainan berjalan.
Penutup: Build Berhasil? Pertempuran Sesungguhnya Menanti
Setelah deretan refactoring tersebut, proses kompilasi kode C# akhirnya berhasil 100% tanpa error. Nama kustom pemain kini tersimpan rapi di PlayerPrefs dan muncul sempurna sebagai PhotonNetwork.NickName di ruang tunggu.
Namun, karena perubahan pada GameScene2D.unity baru saja disimpan, pengujian dua pemain secara langsung via Unity Play Mode / ParrelSync wajib dilakukan berikutnya. Satu langkah lagi menuju game multiplayer yang benar-benar siap dimainkan!
dadah.