Kategori
Devlog/Studlog

1 Hari 1 Tutorial: Hari 15 – Drag and Drop

Tutorial yang singkat-ish lagi, tapi jadi lama karena ngerasa kurang puas dengan hasilnya. Ini adalah tutorial mekanik drag and drop pake method built-in pada node node Control. Konsepnya sih, drag and drop ini cuma mindahin data dari objek pada awal mula nge-drag ke area tempat nge-drop. Dan di sini datanya adalah Texture2D.

Liat tutorial lain buat ide tambahan, data yang dipindahin bisa berupa Dictionary jadi bisa lebih fleksibel.

Tetep ngerasa gak puas. Objek yang di drag hanya bisa di drop kalau kursor mouse masuk ke area drop. Inginnya meski mouse belum masuk area drop tapi objek drag udah sebagian besar beririsan dengan area drop, objek tetap bisa didrop di area. Kalau liat-liat tutorial lainnya lagi, banyak yang bikin sistem sendiri pakai Rigidbody2D dll. Kayaknya sih kalau pakai itu, bisa kayak yang aku inginkan.

Github: fajarfh/OneDay-OneTut: Latihan ngerjain 1 tutorial Godot tiap hari selama bulan Maret

Asset: Kenney Playing Card Pack

Kategori
Devlog/Studlog

1 Hari 1 Tutorial: Hari 14 – API Calls

Yang ini sangat singkat; cuma konek HTTP dan parsing JSON untuk konek ke API. Aku belum biasa pakai API. Yah, untuk sampai ke demo make API-nya, atau bikin indikator loading saat nunggu datanya diambil, mending cari tutorial lain.

Atau bisa diulik sendiri sih, sekalian permak tombol dan nge-pas-in ukuran window di Itch.io. Tapi untuk kali ini, I just wanna be done with it.

Github: fajarfh/OneDay-OneTut: Latihan ngerjain 1 tutorial Godot tiap hari selama bulan Maret

Kategori
Devlog/Studlog

1 Hari 1 Tutorial: Hari 13 – Joint2D

Tutorial ini sebenarnya pengenalan fitur dasar saja. Node-node unik di Godot yang menarik tapi kalau ga dikasih tahu ga bakal nyadar kalau fitur ini ada. Joint2D ini terdiri dari 3 jenis Node yang bisa menghubungkan 2 node berjenis Physics2D dan turunannya; DampedSpringJoint2D, GroovrJoint2D, dan PinJoint2D. Videonya dibikin 4 tahun lalu dan pake Godot 3.2, tapi masih relevan. Kayak yang… fiturnya ga berkembang sejak itu. Kenapa ya?

Video pengenalan fitur dasar gini memang mudah dipahami, tapi kalau tidak ada konteks implementasinya dalam kasus real-life bakal bingung juga nanti makenya gimana. Di sini diliatin (diliatin doang) kalau fitur ini bisa dipake misalnya dalam objek mobil yang menggabungkan Rigidbody kotak dengan roda. Aku coba-coba sendiri bikin kayak, tapi ga berhasil.

Bahkan, kayaknya node-node ini agak kurang berhasil bikin mekanik yang aku mau. Misal pas mau bikin platform jungkat-jungkit pakai PinJoint2D, platform berputar terlalu cepat pas player menginjaknya. Bahkan properti angular_limit yang harusnya membatasi sudut perputaran platform ga berfungsi sama sekali.

Kayaknya jadi paham kenapa disarankan banget buat ganti physics library dari GodotPhysics ke alternatif-alternatif pihak ketiga.

Akhirnya di praktek tutorial ini aku bikin aja game platformer yang kemaren dengan ditambahin objek-objek yang pakai Joint2D. Agak berantakan, tapi seenggaknya jalan.

Github: fajarfh/OneDay-OneTut: Latihan ngerjain 1 tutorial Godot tiap hari selama bulan Maret

Asset: Kenneys

Kategori
Devlog/Studlog

1 Hari 1 Tutotial: Hari 12 – Gridmap

Sudah gatal pingin nyobain 3D di Godot, tapi kebanyakan tutorialnya panjang. Yang ini lumayan pendek dan basic jadi layak dicoba.

Gridmap ini cukup oke tapi ga seenak Tilemap di 2D. Yang paling ga enak dari 3D adalah (dan aku rasain di 3D software-software lain juga) navigasinya ga enak. Tambah lagi, Godot kayaknya ga punya Hand Tool yang bisa nge-grab layar dan ngegeser secara intuitif. Apalagi pas make Gridmap. Makanya aku ngerjain tutorial ini cuma sampai ‘yah, aku bisa pakai ini’, tapi ga sampai bikin level yang estetik apalagi proper pakai Gridmap. Mungkin perlu belajar dari tutorial yang lebih dasar lagi.

Btw, karena tutorial ini pake Godot 4.1, di Godot 4.3 udah agak beda. Update MeshLibrary bisa nimpa file yang sama karena ada pilihan ‘Merge’. Kemudian, buat edit TextureMesh di salah satu objek 3D di Mesh library, kayaknya Texturenya harus dibikin ‘Make Unique’ dulu biar bisa diedit.

Github: fajarfh/OneDay-OneTut: Latihan ngerjain 1 tutorial Godot tiap hari selama bulan Maret

Asset:

  • Kenneys
Kategori
Devlog/Studlog

1 Hari 1 Tutorial: Hari 11 – Asynchronous Subscene Loading

Ini adalah tips alternatif perpindahan scene tanpa fungsi scene loader bawaan Godot. Di sini, kita tidak akan berpindah scene saat, misalnya, pindah level, karena level dijadikan instance dari scene utama (atau subscene). Saat berpindah level, kita hanya akan mengganti instance level tanpa meninggalkan atau me-load ulang scene utama.

Cara ini diklaim bisa me-load level lebih cepat (karena sebagian aset dan data ditaruh di scene utama), membuat kustomisasi transisi/perpindahan antar level lebih fleksibel, dan dapat membuat layar loading saat level di-load secara asynchronous (dijalankan berbarengan dengan perintah lain).

Sebenarnya kalau untuk membuat loading yang ada progressnya, ada tutorial lain yang tetap pakai fungsi scene loader. Namun, cara ini juga menarik. Aku belum bisa membayangkan kasus seperti apa yang tidak bisa pakai cara seperti ini.

Github: fajarfh/OneDay-OneTut: Latihan ngerjain 1 tutorial Godot tiap hari selama bulan Maret

Asset:

  • Kenneys
Kategori
Devlog/Studlog

1 Hari 1 Tutorial: Hari 10 – Reflection

Efek ini terlihat bagus meski effortnya ga besar-besar amat. Meski demikian, kayaknya kalau mau lebih proper hasilnya, effortnya perlu lebih lama lagi. Khususnya nyiapin asset sprite yang bagus buat refleksinya.

Pada dasarnya, ini hanya ngeduplikat sprite karakter yang direfleksikan, nge-masking objek tersebut, nyesuain posisinya, dan nge-ganti frame sprite-nya tergantung frame sprite karakter. Yang terakhir itu susah karena tergantung gimana aset sprite karakter yang direfleksikan. Di tutorial, fungsi dan algoritma digunakan untuk menentukan frame refleksi dari spritesheet yang digunakan. Karena susunan spritesheet di aset yang saya pakai beda, ya jadinya fungsinya bakal beda (kecuali ngedit susunan spritesheet-nya jadi sama dengan tutorial). Daripada bingung lama-lama, akhirnya pakai Dictionary yang nyimpen hubungan frame karakter dengan frame refleksi satu-per-satu.

Di sini pakai cara masking yang beda dengan yang di tutorial hari 1, ga pake coding di shader. Mungkin bisa dibikin ulang pakai cara ini.

Oh, sebenarnya yang bikin lama ngerjain ini tuh, karena ada yang masih bikin gatel dari hasil kerjaan hari 8 yang dipake lagi di sini. Kalau sprite ngadep samping pas lagi stuck di depan kaca, karakter ga bisa ngadep ke depan meski udah kasih input. Setelah ngulik lama, akhirnya bisa. Fixnya cukup simple, bisa cek di git.

Github: fajarfh/OneDay-OneTut: Latihan ngerjain 1 tutorial Godot tiap hari selama bulan Maret

Asset:

Kategori
Devlog/Studlog

1 Hari 1 Tutorial: Hari 9 – Pushing Object

Awalnya mau ngikutin tutorial Websocket pake Python tapi ternyata tutorialnya udah basi 2 tahun, jadi pas dicoba ada class yang udah ga ada. Cek manual Godot, ada class penggantinya, nyobain demonya, ga jalan juga. Karena bakal lama nyari workaroundnya (plus lagi pingin nonton- hey 2 film pemenang oscar di CGV PVJ masing-masing cuma 25ribu!) akhirnya nyerah dan pilih tutorial lain yang lebih ringan.

Ini pengetahuan dasar sih. Tapi urusan collision ini seeeerrriiing lupa masalah milih tipe node yang tepat (static body, rigid-body, area2D, dll.) dan ngatur collision layer serta mask masing-masing node. Selengkapnya, rujuk ke sini aja: Physics introduction — Godot Engine (stable) documentation in English.

Yang aku pahami, kalau misalnya ada dua objek A dan B punya collision layer di layer 1, tapi objek A ga punya collision mask di layer 1 sedangkan objek B punya, maka posisi objek A ga akan terpengaruh oleh tabrakan dari objek B sedangkan objek B bisa digeser oleh objek A. Kira-kira begitulah.

Dalam tutorial, ada tips biar objek yang diinjek bisa tetep solid dan ga kaya kedorong ke lantai lalu mantul. Kupikir tips yang sama bsia dipakai dalam kasus saat pemain kejepit di antara 2 objek platform bergerak. Tapi ternyata lebih rumit kalau mau bagus. Perlu merhatiin arah geraknya, dll.

Asset dari Kenneys.

Git: https://github.com/fajarfh/OneDay-OneTut

Kategori
Devlog/Studlog

1 Hari 1 Tutorial: Hari 8 – Animation Tree

Tutorial kali ini topiknya Animation Tree. Fitur ini salah satu yang sering aku lupa sekalipun sudah pelajari waktu belajar Unity. Di Godot kira-kira mirip.

Ini tutorial yang ada bahannya, tapi aku masih ga mau pake. Aku pake hasil tutorial hari-hari kemarin aja. Seenggaknya, ga usah ngatur background lagi. Kalau untuk aset karakternya, aku pakai yang sama dengan tutorial.

Tapi, ini tetap lama di setup animasinya. Aku udah beres nyetting animasi dari spritsheet di SpriteFrame buat dipake di Animated Sprite. Eh, Animation Tree cuma bisa pake Animation Player -_-. Lama nyetting animasi frame-by-frame di Animation Player, pas implementasi di Animation Tree malah ga jalan. Lama banget troubleshooting soal ini. Entah masalah utamanya di mana. Entah soal pengaturan track RESET, entah di properti yang dianimasikan yang harus sama di semua animasi yang masuk AnimatedNodeSpace2D buat dipake di Animation Tree.

Akhirnya bisa juga sih. Termasuk nambahin code biar animasinya dipengaruhi tile data dan nambahin input attack sederhana. Tapi ngerjain dari pagi ke sore buat tutorial yang ga terlalu panjang kayak gini bikin kesel juga.

Git-nya: fajarfh/OneDay-OneTut: Latihan ngerjain 1 tutorial Godot tiap hari selama bulan Maret

Asset dari Kenneys dan Ninja Adventure – Asset Pack by pixel-boy

Kategori
Devlog/Studlog

1 Hari 1 Tutorial: Hari 7 – Strategy Pattern

Hari ini pilih yang agak panjang dan konseptual karena rada lengang.

Tutorial ini menunjukkan teknik modular buat implementasi sistem upgrade item. Teknik ini menerapkan strategy pattern atau polimorfisme… yang sebenarnya ga terlalu ngerti juga artinya apaan. Katanya sih, polimorfisme ini suatu class yang bisa punya method yang sama dengan parameter yang beda-beda. Kalau di tutorial, kita bikin satu class yang punya method, lalu punya kelas turunan yang punya method yang sama, tapi isinya beda.

Di sini, kita bikin satu class dasar item upgrade yang diturunkan dari node resource dan satu scene/prefab item upgrade yang memuat perilaku dasar dan atribut dari item upgrade. Lalu, kita bikin class-class turunan yang masing-masing berisi method tiap item upgrade yang berbeda. Class turunan ini karena turunan resource juga jadi bisa dibikin dengan fitur klik-kanan > Create New > Resources.. di File System. Selanjutnya nonton tutorialnya aja ._.

Aku belum paham apakah sistem ini performanya bagus atau tidak, dan apakah modularitasnya memudahkan atau tidak. Namun aku merasa item-itemnya jadi terlihat lebih rapih.

Tutorial ini sudah ngasih aset dan akses file proyek lewat github. Jadi, kalau aku bikin lewat download yang dari github, rasanya jadi ga belajar. Kalau bikin sendiri dari awal repot juga sih. Jadinya aku pakai proyek yang kemarin, lalu yang diupgradenya diganti dari peluru ke karakter (biar tidak perlu bikin aset peluru dan musuh). Meski beda, si strategy pattern nya tetap bisa diimplementasikan dan diikuti. Aku juga menambahkan mekanik reset kondisi karakter setelah jeda sekian detik dari mengambil upgrade.

Kalau mau lihat code yang sudah diubah, bisa cek di github: https://github.com/fajarfh/OneDay-OneTut

Kategori
Devlog/Studlog

1 Hari 1 Tutorial: Hari 6 – Moving Platform

Bikin platform bergerak dalam 2D platformer sudah pernah sih, tapi tutorial ini ngasih trik buat bikinnya pake Path2D dan AnimatableBody. Tutorial ini juga ngasih teknik biar objek platform bergerak bisa lebih modular dan tipe pergerakannya bisa dikustomisasi lebih enak.

Di sini, kita bakal bikin 2 jenis pergerakan berdasarkan Curve dari Path2D-nya yaitu open-path dan closed-path. Open-path dianimasikan pakai Animation Player yang ngubah nilai progress dari PathFollower2D sehingga bisa bikin platform bergerak bolak-balik. Sedangkan pada closed-path, animasinya pakai ngubah nilai progress juga, tapi diubahnya di _process() sehingga bisa bikin animasi yang sirkular.

Tips tambahan, kalau mau bikin path yang melingkar sempurna, mending masukin kordinatnya satu-satu di Inspector.

Git: https://github.com/fajarfh/OneDay-OneTut