Daftar Isi:

Cara Membuat Game Multiplayer Dengan Kontroler Arduino: 6 Langkah
Cara Membuat Game Multiplayer Dengan Kontroler Arduino: 6 Langkah

Video: Cara Membuat Game Multiplayer Dengan Kontroler Arduino: 6 Langkah

Video: Cara Membuat Game Multiplayer Dengan Kontroler Arduino: 6 Langkah
Video: Ternyata SE-SUSAH Ini Membuat GAME !!!! 🎮😰😭 2024, Juli
Anonim
Cara Membuat Game Multiplayer Dengan Kontroler Arduino
Cara Membuat Game Multiplayer Dengan Kontroler Arduino

Pernahkah Anda bertanya-tanya bagaimana pengembang game membuat game luar biasa yang dinikmati orang di seluruh dunia? Baiklah, Hari ini saya akan memberi Anda sedikit petunjuk tentangnya dengan membuat game multipemain kecil yang akan dikendalikan oleh pengontrol Arduino yang juga akan Anda buat. Jadi, mari kita mulai.

Perlengkapan

Anda akan perlu:

  • Sebuah laptop
  • Mesin Persatuan
  • C# IDE yang bekerja dengan Unity seperti visual studio atau Atom. (Saya akan Menggunakan Kode Visual Studio)
  • 2X Arduino Nano
  • 2X Papan Roti Besar
  • 2X Papan Roti Kecil
  • Sakelar Taktik 4X (Tombol Tekan)
  • 4X 200Ω Resistor
  • 12X Kabel Jumper Pria ke Pria
  • Arduino IDE

Akan sangat membantu jika Anda memiliki pemahaman dasar tentang penggunaan Unity, namun itu tidak akan memengaruhi kemajuan Anda karena Anda akan terbiasa dengannya saat membuat game.

Tautan untuk mengunduh Unity Engine:

store.unity.com/download-nuo

Tautan untuk mengunduh IDE Kode Visual Studio:

code.visualstudio.com/download

Tautan untuk mengunduh Arduino IDE:

www.arduino.cc/en/Main/Software

Langkah 1: Siapkan Perbatasan Game

Siapkan Perbatasan Game
Siapkan Perbatasan Game
Siapkan Perbatasan Game
Siapkan Perbatasan Game
Siapkan Perbatasan Game
Siapkan Perbatasan Game

Pertama-tama, Anda perlu mengunduh unity

Setelah selesai, Anda dapat mulai mengatur tampilan game Anda.

Buka proyek Unity baru, beri nama dan pilih game 2D.

Ketika proyek terbuka, perhatikan bahwa ada 3 bagian utama yang disebut

  • Hirarki (di sinilah semua objek dan detail game Anda akan ditambahkan).
  • Adegan (tempat Anda mengatur tampilan game).
  • Game (di mana Anda dapat menguji bagaimana game sebenarnya akan berjalan).

Perhatikan bahwa di bawah hierarki ada adegan Anda dan di bawah layar ada "Kamera Utama". Saat Anda memilih kamera dari hierarki, itu akan dipilih dalam adegan

(Apa pun yang ada di dalam batas kamera ini akan ditampilkan di game sebenarnya).

Lihat gambar 1

Permainan kami terdiri dari dua papan, bola yang bergerak, dan perbatasan yang membatasi pergerakan papan dan bola.

Mari kita mulai dengan membuat perbatasan.

  1. Untuk membuat objek game baru, pilih Assets>Create>Sprites>square (beri nama “batas kanan dan kiri”) Lihat gambar 2
  2. Seret dan lepas batas kanan dan kiri ke hierarki dan kotak akan muncul di layar.
  3. Sesuaikan posisi sumbu x ke (5) “batas kanan dan kiri”>inspektur>transform>posisi>X. Perhatikan gambar 3
  4. Kemudian sesuaikan skalanya sehingga cukup besar untuk menutupi batas kamera (seret sisi atas dan bawah kotak untuk meregangkannya).
  5. Sesuaikan warnanya “dari batas kanan dan kiri”>inspektur>sprite render>warna. Perhatikan gambar 3
  6. Gulir ke bawah di inspektur dan pilih tambahkan komponen lalu ketik Rigidbody2D dan tekan enter, ini pada dasarnya akan menambahkan fisika ke objek permainan Anda karena memberikan deteksi massa, gravitasi, dan tabrakan. Namun kami tidak membutuhkan gravitasi dalam permainan kami jadi buatlah gravitasi 0 sebagai gantinya 1. Anda juga perlu membekukan posisi dan rotasi agar perbatasan tidak bergerak saat bertabrakan. Perhatikan gambar 4
  7. pilih add component lalu ketik Box Collider 2D dan tekan enter ini akan menambah area di sekitar objek game di mana tabrakan dapat dideteksi. Perhatikan gambar 4
  8. Sekarang pilih batas kanan dan kiri dan tekan (ctrl+d) untuk menduplikasinya.
  9. Ubah namanya menjadi "batas kiri" dan ganti nama yang pertama ("batas kanan").
  10. Pilih batas kiri dan sesuaikan posisi sumbu x ke (-5) dengan cara yang sama pada langkah 3. Sekarang Anda memiliki batas kanan dan kiri.

Ulangi 10 langkah sebelumnya dengan batas atas dan bawah dan ubah posisi y persegi alih-alih posisi x. Pratinjau terakhir harus mirip dengan yang ada di gambar.

Perhatikan gambar 5

Langkah 2: Menambahkan Papan dan Membuat Pengontrol

Menambahkan Papan dan Membuat Pengontrol
Menambahkan Papan dan Membuat Pengontrol
Menambahkan Papan dan Membuat Pengontrol
Menambahkan Papan dan Membuat Pengontrol
Menambahkan Papan dan Membuat Pengontrol
Menambahkan Papan dan Membuat Pengontrol

Menambahkan Papan

Buat objek game baru dan beri nama player 1.

Menyesuaikan:

  • Skala: X(1.2), Y(0.15), Z(1)
  • Posisi: X(0), Y(-3.6), z(0)
  • Tambahkan BoxCollider2D
  • Tambahkan Rigidbody 2D dan bekukan sumbu y dan z.

Duplikat(ctrl+d) dan ganti nama pemutar salinan 2.

Menyesuaikan:

  • Skala: X(1.2), Y(0.15), Z(1)
  • Posisi: X(0), Y(3.6), z(0)
  • BoxCollider akan sudah ada di sana.
  • Rigidbody 2D sudah ada di sana dan sumbu y dan z akan dibekukan.

Lihat gambar 1

Membuat Pengendali

Anda akan perlu:

  • 2X Arduino Nano
  • 2X Papan Roti Besar
  • 2X Papan Roti Kecil
  • Sakelar Taktik 4X (Tombol Tekan)
  • 4X Resistor
  • 12X Kabel Jumper Pria ke Pria

Sekarang lihat foto papan roti dan pemetaan untuk merakit joystick.

  1. Pasang satu chip Arduino Nano dengan papan roti kecil.
  2. pasang 2 tombol Tack pada papan roti besar seperti yang ditunjukkan pada gambar. Usahakan agar sisi kanan papan roti simetris dengan yang kiri karena ini akan membuat joystick terlihat lebih baik (Anda dapat menggunakan kolom ke-30 sebagai simetri garis)
  3. Hubungkan pin kiri atas tombol kiri dengan pin 5V di Arduino pada papan roti kecil (hal-hal yang terhubung dengan kolom yang sama di papan tempat memotong roti terhubung satu sama lain).
  4. Hubungkan pin kanan atas tombol kanan dengan pin 5V di Arduino.
  5. Hubungkan pin kanan bawah tombol kiri dengan titik pada kolom ke-31 menggunakan resistor.
  6. Hubungkan pin kiri bawah tombol kanan dengan titik pada kolom ke-29 menggunakan resistor.
  7. Hubungkan resistor dengan pin GND di Arduino.
  8. Hubungkan pin kanan atas tombol kiri dengan pin D3 di Arduino.
  9. Hubungkan pin kiri atas tombol kanan dengan pin D9 di Arduino.
  10. Sekarang ulangi langkah-langkah ini dan buat pengontrol kedua.

Langkah 3: Menghubungkan Arduino ke Port Serial

Menghubungkan Arduino ke Port Serial
Menghubungkan Arduino ke Port Serial
Menghubungkan Arduino ke Port Serial
Menghubungkan Arduino ke Port Serial
Menghubungkan Arduino ke Port Serial
Menghubungkan Arduino ke Port Serial
Menghubungkan Arduino ke Port Serial
Menghubungkan Arduino ke Port Serial

Pertama, Anda perlu menginstal Arduino IDE.

Setelah terinstal, Anda dapat memulai dengan membuat program Arduino yang menerima input dari tombol dan menyimpannya di port Serial (port COM). Saat papan Arduino terhubung ke laptop Anda, sistem operasi secara otomatis mengenali papan tersebut sebagai port serial, tempat program dapat diunggah. Nilai yang tersimpan di port serial dapat digunakan pada langkah selanjutnya saat kita menghubungkan Unity Engine dengan port serial.

Sekarang mari kita hubungkan Arduino dengan port Serial.

Lihat gambarnya

  1. Hubungkan Arduino dengan laptop Anda
  2. Alat>Papan>Arduino Nano
  3. Jika chip Arduino Anda terbaru(2018-2020) Alat> Prosesor> ATmega328P (Bootloader Lama).
  4. Jika chip Arduino Anda bukan yang terbaru (sebelum 2018) Alat>Prosesor>ATmega328P
  5. Alat> Port> COM (nomor apa pun yang muncul, dalam kasus saya ini adalah 10). * Ini adalah port serial tempat nilai akan disimpan.
  6. Salin kode dan tempel di Arduino IDE dan tekan ctrl+u untuk mengunggah program.
  7. Ulangi dengan Arduino kedua. (saat melakukan langkah 5 pastikan untuk memilih port COM lain sehingga kedua pengontrol tidak akan terhubung ke port serial yang sama).

Kode:

batalkan pengaturan() {

Serial.begin(9600); pinMode(3, INPUT); // Memberitahu Arduino untuk menerima input dari pin D3 pinMode(9, INPUT); //Memberitahu Arduino untuk menerima input dari pin D9 } void loop() { if(digitalRead(3)==1){ /* Jika Arduino menerima input 1 Serial.write(1); dari pin 3 Keluarkan nilai 1 ke port serial Serial.flush(); */ penundaan (2); } if(digitalRead(9)==1){ /* Jika Arduino menerima input 1 Serial.write(2); dari pin 9 Keluarkan nilai 2 ke port serial Serial.flush(); */ penundaan (2); } }

Penjelasan program:

Kode ini hanya mengambil input dari pin D3 dan pin D9 di Arduino, yang terhubung ke tombol. Tombol ditekan atau tidak ditekan yang berarti bahwa pembacaan yang diambil dari tombol tersebut adalah 1 (ditekan) atau 0 (tidak ditekan). Jika input dari tombol kanan (dari D9) adalah 1 (ditekan) simpan nilai 1 di port Serial. Jika input dari tombol kiri (dari D3) adalah 1 (ditekan) simpan nilai 2 di port Serial.

Langkah 4: Menghubungkan Unity Dengan Port Serial

Menghubungkan Unity Dengan Port Serial
Menghubungkan Unity Dengan Port Serial
Menghubungkan Unity Dengan Port Serial
Menghubungkan Unity Dengan Port Serial

Untuk langkah ini kita akan mengidentifikasi port serial di Unity sehingga dapat menerima input dari Arduino saat tombol ditekan. Instal Kode Visual Studio di laptop Anda. Lalu pergi ke Unity, pilih pemain 1 dari hierarki, gulir ke bawah dan pilih tambahkan komponen dan ketik player1_motion lalu tekan enter. Lihat gambar 1

Skrip C# akan dibuat di inspektur, klik kanan padanya dan pilih edit skrip, kode visual studio akan terbuka dan akan menampilkan kode default yang terlihat seperti gambar 2.

Copy kode berikut lalu ubah "SerialPort sp = new SerialPort("COM10", 9600);" dengan SerialPort sp = new SerialPort("COM port yang terhubung dengan Arduino Anda", 9600); Anda dapat menemukannya dengan kembali ke kode Arduino Anda dan pergi ke Tools>Port>COM (nomor apa pun yang muncul).

Kode:

menggunakan System. Collections;

menggunakan System. Collections. Generic; menggunakan UnityEngine; menggunakan System. IO. Ports; public class player1_motion: MonoBehaviour { kecepatan mengambang = 8; jumlah float pribadi untuk dipindahkan; SerialPort sp = SerialPort baru("COM10", 9600); // Start dipanggil sebelum update frame pertama void Start() { sp. Open(); sp. ReadTimeout = 1; } // Update dipanggil sekali per frame void Update() { quantitytomove = speed*0.01f; if(sp. IsOpen){ coba { moveObject(sp. ReadByte()); print(sp. ReadByte()); } catch(System. Exception){ } } } void moveObject(int Direction) { if(Arah == 1){ transform. Translate(Vector3.left*amounttomove, Space. World); } if(Arah == 2){ transform. Translate(Vector3.right*amounttomove, Space. World); } } }

Penjelasan Kode:

Kode ini memberitahu kesatuan untuk menerima input dari port serial (COM 10). Ketika tombol kiri ditekan, Arduino mengirimkan nilai 1 ke port serial, jika unity menerima 1 dari port serial, kecepatan ditambahkan ke objek game "pemain 1" di arah kiri. Saat tombol kanan ditekan, Arduino mengirimkan nilai 2 ke port serial, jika unity menerima 2 dari port serial, kecepatan ditambahkan ke objek game "pemain 1" ke arah yang benar. jika port serial tidak menerima nilai dari port serial, tidak ada kecepatan yang ditambahkan di kedua arah karena itu, papan tetap diam.

Setelah Anda menyalin kode, tekan F5 untuk membuat dan menjalankan kode. Kembali ke unity dan tekan tombol play, pemain 1 harus bergerak ke kanan saat Anda menekan kanan dan kiri saat Anda menekan kiri.

Sekarang, lakukan langkah yang sama sekali lagi tetapi dengan pemutar 2 dan pastikan untuk menulis di 'Tambahkan komponen' player2_motion alih-alih player1_motion dan untuk mengidentifikasi port COM kedua yang terhubung dengan pengontrol kedua, bukan port serial yang sama.

Anda juga perlu mengubah "public class player1_motion: MonoBehaviour" menjadi "public class player2_motion: MonoBehaviour" dalam kode itu sendiri.

Langkah 5: Menambahkan Bola

Menambahkan Bola
Menambahkan Bola
Menambahkan Bola
Menambahkan Bola
Menambahkan Bola
Menambahkan Bola
  1. Tambahkan objek game baru, tetapi kali ini pilih lingkaran, bukan persegi.
  2. Ganti namanya menjadi "bola".
  3. Seret dan lepas dalam hierarki.
  4. Sesuaikan skala (X:0.2 - Y:0.2 - Z: 0.2).
  5. Tambahkan Rigidbody 2D dan bekukan sumbu Z saja.
  6. Ubah massa menjadi 0,0001
  7. Ubah Skala Gravitasi menjadi 0.
  8. Tambahkan Box Collider 2D.
  9. Masuk ke Aset>Buat>Materi Fisika 2D Lihat gambar 1
  10. ubah namanya menjadi "bounce"
  11. Ubah gesekan menjadi nol dari inspektur
  12. Ubah goyangan menjadi 1 dari inspektur
  13. Drag dan drop "bouncing" ke Rigidbody 2D>Material Lihat gambar 2
  14. Pilih "bola" lagi dari hierarki dan pergi untuk menambahkan komponen dan ketik Ball_movement lalu tekan enter.
  15. Klik kanan pada skrip dan pilih edit skrip.
  16. Salin kode di bawah ini dan tekan F5 untuk membangun dan menjalankannya.

Kode:

menggunakan System. Collections;

menggunakan System. Collections. Generic; menggunakan UnityEngine; public class Ball_movement: MonoBehaviour { // Start dipanggil sebelum update frame pertama private float force = 2; void Mulai() { StartCoroutine(pindah()); } IEnumerator move() { menghasilkan return baru WaitForSeconds(2); GetComponent(). AddForce(new Vector2(1f, 0.5f)*0.02f*force); } }

Penjelasan kode

Kode ini memberikan bola kecepatan di kedua arah arah X dan arah Y dengan besaran yang sama, yang membuat bola bergerak pada sudut 45 °. Pada langkah 8 kami menambahkan materi fisika ke bola dan mengubah goyangannya, ini mempertahankan pergerakan bola sepanjang permainan.

Langkah 6: Menyelesaikan Game

Menyelesaikan Permainan
Menyelesaikan Permainan
Menyelesaikan Permainan
Menyelesaikan Permainan
Menyelesaikan Permainan
Menyelesaikan Permainan
Menyelesaikan Permainan
Menyelesaikan Permainan

Sekarang kita perlu membuat kekalahan menjadi mungkin, jika Anda menjalankan permainan, Anda akan melihat bahwa ketika bola melewati pemain 1 atau pemain 2 itu hanya memantul dari perbatasan dan bukan itu yang kami butuhkan dalam permainan kami. Sebagai gantinya kami ingin membuat penghitung skor yang menghitung skor setiap kali bola bertabrakan dengan batas atas atau bawah dan untuk mengatur ulang posisi bola.

  1. Seret dan jatuhkan bola dari Hirarki ke Proyek, Anda telah membuat cetakan bola sehingga Anda dapat menggunakannya nanti.
  2. Klik kanan pada Hierarchy dan pilih Create Empty. akan muncul Object kosong, ganti namanya menjadi ball respawn dan ubah posisinya menjadi sama dengan posisi bola.
  3. Klik kanan pada hierarki dan pilih UI >> Teks. Perhatikan bahwa teks menyertai kanvas posisi teks dalam permainan tergantung pada posisi teks di kanvas, bukan di perbatasan permainan kita. (Lihat gambar 1).
  4. Ubah posisi teks ke mana pun Anda inginkan.
  5. Ulangi langkah 3 dan 4 lagi untuk skor pemain kedua.
  6. Ketik teks pertama "Skor Pemain 1: 0" dan ketik teks kedua "Skor Pemain 2: 0". (Lihat gambar 2).
  7. Buat skrip di perbatasan atas bernama p1wins dan salin kode berikut.

Kode:

menggunakan System. Collections;

menggunakan System. Collections. Generic; menggunakan UnityEngine; menggunakan UnityEngine. SceneManagement; menggunakan UnityEngine. UI; p1wins kelas publik: MonoBehaviour { skor Teks publik; publik Transform ball_respawn; bola GameObject publik; int pribadi p1 = 0; // Start dipanggil sebelum update frame pertama void Start() { } // Update dipanggil sekali per frame void Update() { score.text = "Player 1 Score:" + p1; } void OnCollisionEnter2D (Collision2D other) { if(other.gameObject.tag == "Bola") { Hancurkan(other.gameObject); p1++; Instansiasi(bola, ball_respawn.position, ball_respawn.rotation); } } }

8. Seret dan jatuhkan cetakan bola dari proyek pada langkah 1 ke dalam parameter Bola. (lihat gambar 3)

9. Seret dan lepas bola respawn dari hierarki ke parameter Ball-rerspawn. (lihat gambar 3)

10. drag and drop skor pemain 1 dari hierarki ke parameter Skor. (lihat gambar 3)

Penjelasan Kode:

Ketika bola bertabrakan dengan batas atas, ia hancur dan respawn kembali pada posisi ball_respawn yang kita tetapkan di langkah 2. tujuan membuat bola menjadi prefab adalah untuk dapat merespawnnya dengan semua fitur-fiturnya, sebaliknya jika kita menggunakan bola dari hierarki itu akan muncul kembali tetapi tidak akan bergerak. Juga ketika bola bertabrakan dengan batas atas nilai yang awalnya sama dengan 0 disebut p1 meningkat 1. nilai ini ditampilkan sebagai teks sehingga ketika bola bertabrakan dengan batas atas skor untuk pemain 1 meningkat 1.

Sekarang lakukan langkah 7, 8, 9 dan 10 untuk batas bawah

untuk langkah 7, buat skrip bernama p2wins dan salin kode berikut sebagai gantinya.

untuk langkah 10, seret dan lepas skor pemain 2 dari hierarki ke parameter Skor.

Kode:

menggunakan System. Collections;

menggunakan System. Collections. Generic; menggunakan UnityEngine; menggunakan UnityEngine. SceneManagement; menggunakan UnityEngine. UI; p2wins kelas publik: MonoBehaviour { skor Teks publik; publik Transform ball_respawn; bola GameObject publik; int pribadi p2 = 0; // Start dipanggil sebelum update frame pertama void Start() { } // Update dipanggil sekali per frame void Update() { score.text = "Player 2 Score:" + p2; } void OnCollisionEnter2D (Collision2D other) { if(other.gameObject.tag == "Bola") { Hancurkan(other.gameObject); p2++; Instansiasi(bola, ball_respawn.position, ball_respawn.rotation); } } }

Direkomendasikan: