Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Game Development
  2. 2D Games
Gamedevelopment

Mekanika Pengguna Platform: Platform Bergerak

by
Difficulty:BeginnerLength:MediumLanguages:

Indonesian (Bahasa Indonesia) translation by Kholisa Nurrahmah (you can also view the original English article)

Final product image
What You'll Be Creating

Dalam tutorial ini Anda akan belajar bagaimana membuat platform yang bergerak dan memastikan bahwa objek yang dikendarai akan mempertahankan posisi relatif mereka. Kami juga akan menangani kasus yang telah dipilah antara platform dan dasarnya.

Prasyarat

Tutorial ini didasarkan pada seri Basic Platformer Physics. Secara khusus, kami akan menggunakan kode berdasarkan bagian 8 tutorial sebagai titik awal, dengan beberapa modifikasi.  Simak tutorial series, dan khususnya the last part. Prinsip di balik penerapannya akan tetap ada meski anda menggunakan solusi fisika yang berbeda, namun kodenya akan kompatibel dengan versi yang disajikan dalam rangkaian tutorial.

Demo

Anda bisa mendownload demo dari tutorial attachments. Gunakan kunci WASD untuk memindahkan karakter, Space untuk menelurkan karakter kloning, dan P untuk menelurkan sebuah platform yang bergerak.  Tombol kursor sebelah kanan menciptakan ubin. Anda dapat menggunakan roda gulir atau tombol panah untuk memilih ubin yang ingin Anda tempatkan. Slider mengubah ukuran karakter pemain.

Demo tersebut telah dipublikasikan di Unity 2017.2b4, dan kode sumbernya juga kompatibel dengan versi Unity ini.

Pelaksanaan

Pindah Platform

Pertama-tama, mari membuat naskah untuk platform yang bergerak.

Inisialisasi

Mari kita mulai dengan membuat kelas objek.

Sekarang mari kita inisialisasi beberapa parameter dasar objek dalam fungsi init.

Kita mengatur ukuran dan kecepatan, dan kita membuat collider kinematic, yang berarti tidak akan dipindahkan oleh objek biasa. Kami juga mengatur mSlopeWallHeight ke 0, yang berarti bahwa platform tidak akan mendaki lereng-itu akan selalu memperlakukan mereka sebagai dinding.

Tingkah laku

Perilaku untuk platform bergerak khusus ini akan menjadi seperti ini: gerakan awal benar, dan setiap kali anda menemui hambatan, ubah arah 90 derajat searah jarum jam.

Inilah pola yang divisualisasikan:

The pattern visualized

Menempelkan Karakter ke Platform

Saat ini, jika karakter berdiri di atas platform, platform hanya akan meluncur dari bawahnya, seolah-olah tidak ada gesekan antara benda-benda itu. Kami akan mencoba untuk memperbaiki itu, dengan menyalin offset platform.

The offset of the platform

Menentukan Objek Induknya

Pertama-tama, kami ingin menyadari akan objek tersebut, jikapun ada, karakter kami akan sangat nampak. Mari menyatakan referensi ke MovingObject .

Sekarang, UpdatePhysicsResponse, Apabila kita menemukan bahwa kita bertabrakan dengan objek dibawah kita, kita bisa menugaskan referensi ini. Mari buat fungsi yang menugaskan referensi terlebih dahulu.

Sekarang mari kita gunakan tempat yang tepat, mari katakana saja bahwa objek kita bertabrakan dengan objek lain di bawahnya. 

Tempat pertama adalah saat kita memeriksa apakah benda-benda itu menyentuh. 

Tempat kedua adalah saat mereka tumpang tindih.

Sekarang kita sudah membuatnya tertutup, mari kita tangani pergerakan dari objek kita. Mari kita ubah fungsi UpdatePhysics dari tutorial sebelumnya.

Mari kita nyatakan variabel kelas untuk offset yang kita butuhkan untuk memindahkan karakter kita.

Sekarang mari kita menggantikan offset lokal tua dengan kelas satu.

Dalam kasus objek pada platform, mari kita menambahkan gerakan platform untuk offset.

Perhatikan bahwa kami juga memeriksa di sini apabila kami masih berhubungan dengan objek. Jika bukan itu masalahnya, maka kita tetapkan mMountParent menjadi null, untuk menandai bahwa objek ini tidak lagi dikendarai dengan yang lain.

Selanjutnya, mari kita pindahkan posisi objek kita dengan offset itu. Kami tidak akan menggunakan fungsi Move kami, tapi cukup ubah posisi.  Jadi dalam tabrakan cek antar benda, yang terjadi tepat setelah UpdatePhysics, kita akan mendapatkan hasilnya untuk posisi di frame ini daripada yang sebelumnya.

Sekarang mari kita pindah ke UpdatePhysicsP2, yang disebut setelah tabrakan antara objek telah teratasi. Di sini kita membatalkan gerakan kita sebelumnya, yang belum diperiksa apakah itu benar atau tidak.

Selanjutnya, kita lanjutkan ke UpdatePhysicsResponse untuk menerapkan perpindahan dari tumpang tindih dengan objek lain. Di sini, sebelumnya kami memodifikasi posisi secara langsung, tapi sekarang malah mari kita modifikasi mOffset, jadi perubahan posisi ini akan teratasi nanti saat kita menggunakan fungsi Move kita.

Sekarang kita bisa kembali ke UpdatePhysicsP2, di mana kita hanya memanggil UpdatePhysicsResponse dan Movefunctions seperti yang kita lakukan sebelumnya, untuk mendapatkan status posisi yang benar.

Perbaiki Pesanan Pembaruan

Karena cara kita memesan physics update, jika objek anak diperbarui sebelum orang tua, anak akan terus kehilangan kontak dengan platform saat bepergian naik / turun.

Traveling up or down

Untuk memperbaikinya, kapan pun kita mengatur mMountParent, jika platform berada di belakang anak dalam antrian update, kita bertukar keduanya, jadi objek induk selalu update terlebih dahulu. Mari kita lakukan modifikasi itu di TryAutoMountfunction.

Seperti yang dapat anda lihat, jika id update objek platform lebih besar daripada anak, urutan update objek akan ditukar, menghapus masalahnya.

The order of the objects

Itu cukup banyak ketika harus menempelkan karakter ke platform yang bergerak.

Deteksi Menjadi Hancur

Mendeteksi yang hancur sangat sederhana. Dalam UpdatePhysicsResponse, kita perlu melihat apakah tumpang tindih terhadap objek kinematik menggerakkan kita ke dinding.

Mari kita jaga sumbu X dulu:

Jika benda itu ada di sisi kanan kita dan kita sudah menekan dinding kiri, maka kita sebut Crushfunction, yang akan kita implementasikan nanti. Lakukan hal yang sama untuk sisi yang lain.

Mari ulangi untuk sumbu Y.

Fungsi Crush hanya akan memindahkan karakter ke pusat peta untuk demo.

Hasilnya adalah karakter yang diteleport saat sedang dihancurkan oleh sebuah platform.

Being crushed by a platform

Kesimpulan

Ini adalah tutorial singkat karena menambahkan platform bergerak bukanlah tantangan besar, apalagi jika Anda mengenal sistem fisika dengan baik. Meminjam semua kode dalam rangkaian tutorial fisika, sebenarnya prosesnya sangat mulus.

Tutorial ini telah diminta beberapa kali, jadi saya harap anda merasa bahwa ini berguna! Terima kasih telah membaca, dan sampai bertemu dengan anda lain kali!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.