Isi kandungan:

Cara Membuat Permainan Berbilang Pemain Dengan Pengawal Arduino: 6 Langkah
Cara Membuat Permainan Berbilang Pemain Dengan Pengawal Arduino: 6 Langkah

Video: Cara Membuat Permainan Berbilang Pemain Dengan Pengawal Arduino: 6 Langkah

Video: Cara Membuat Permainan Berbilang Pemain Dengan Pengawal Arduino: 6 Langkah
Video: Building Apps for Mobile, Gaming, IoT, and more using AWS DynamoDB by Rick Houlihan 2024, Julai
Anonim
Cara Membuat Permainan Berbilang Pemain Dengan Pengawal Arduino
Cara Membuat Permainan Berbilang Pemain Dengan Pengawal Arduino

Pernahkah anda terfikir bagaimana pembangun permainan membuat permainan luar biasa yang gemar dimainkan oleh seluruh dunia? Nah, Hari ini saya akan memberi anda sedikit petunjuk mengenainya dengan membuat permainan berbilang pemain kecil yang akan dikendalikan oleh pengawal Arduino yang akan anda buat juga. Oleh itu, mari kita mulakan.

Bekalan

Anda perlu:

  • Komputer riba
  • Mesin Perpaduan
  • A C # IDE yang berfungsi dengan Unity seperti studio visual atau Atom. (Saya akan Menggunakan Kod Visual Studio)
  • 2X Arduino Nano
  • Papan Roti Besar 2X
  • Papan Roti Kecil 2X
  • Suis Tack 4X (Butang Tekan)
  • Perintang 4X 200Ω
  • Wayar Jumper Lelaki 12X ke Lelaki
  • Arduino IDE

Ini akan sangat berguna jika anda mempunyai pemahaman asas tentang penggunaan Unity, namun itu tidak akan mempengaruhi kemajuan anda kerana anda akan membiasakannya semasa membuat permainan.

Pautan untuk memuat turun Unity Engine:

store.unity.com/download-nuo

Pautan untuk memuat turun Kod Visual Studio IDE:

code.visualstudio.com/download

Pautan untuk memuat turun Arduino IDE:

www.arduino.cc/en/Main/Software

Langkah 1: Siapkan Sempadan Permainan

Siapkan Sempadan Permainan
Siapkan Sempadan Permainan
Siapkan Sempadan Permainan
Siapkan Sempadan Permainan
Siapkan Sempadan Permainan
Siapkan Sempadan Permainan

Pertama sekali, anda perlu memuat turun perpaduan

Setelah selesai, anda boleh mula menyiapkan paparan permainan anda.

Buka projek Unity baru, beri nama dan pilih permainan 2D.

Apabila projek dibuka, perhatikan bahawa terdapat 3 bahagian utama yang dipanggil

  • Hierarki (di sinilah semua objek dan perincian permainan anda akan ditambahkan).
  • Adegan (tempat anda mengatur paparan permainan).
  • Permainan (di mana anda boleh menguji bagaimana permainan sebenar akan berjalan seperti).

Perhatikan bahawa di bawah hierarki ada pemandangan anda dan di bawah pemandangan terdapat "Main Camera". Apabila anda memilih kamera dari hierarki, kamera akan dipilih di tempat kejadian

(Apa-apa sahaja di dalam batas kamera ini akan ditunjukkan dalam permainan sebenar).

Lihat gambar 1

Permainan kami terdiri daripada dua papan, bola yang bergerak, dan batas yang menghadkan pergerakan papan dan bola.

Mari mulakan dengan membuat sempadan.

  1. Untuk membuat objek permainan baru, pilih Aset> Buat> Sprite> persegi (namakan "sempadan kanan dan kiri") Lihat gambar 2
  2. Seret dan lepas sempadan kanan dan kiri ke hierarki dan kotak akan muncul di tempat kejadian.
  3. Sesuaikan kedudukan paksi x ke (5) "sempadan kanan dan kiri"> pemeriksa> ubah> kedudukan> X. Lihat gambar 3
  4. Kemudian sesuaikan skala sehingga cukup besar untuk menutup batas kamera (seret bahagian atas dan bawah persegi untuk meregangkannya).
  5. Sesuaikan warnanya "dari sempadan kanan dan kiri"> pemeriksa> warna sprite> warna. Lihat gambar 3
  6. Tatal ke bawah pemeriksa dan pilih tambah komponen kemudian ketik Rigidbody2D dan tekan enter, ini pada dasarnya akan menambah fizik ke objek permainan anda kerana memberikannya pengesanan massa, graviti dan perlanggaran. Walau bagaimanapun, kami tidak memerlukan graviti dalam permainan kami jadi jadikan gravitasi 0 sebagai gantinya 1. Anda juga perlu membekukan kedudukan dan putaran agar perbatasan tidak bergerak ketika bertembung. Lihat gambar 4
  7. pilih komponen tambah kemudian ketik Box Collider 2D dan tekan enter ini akan menambahkan kawasan di sekitar objek permainan di mana perlanggaran dapat dikesan. Lihat gambar 4
  8. Sekarang pilih sempadan kanan dan kiri dan tekan (ctrl + d) untuk mendua.
  9. Ganti nama menjadi "batas kiri" dan ganti nama yang pertama ("sempadan kanan").
  10. Pilih sempadan kiri dan sesuaikan kedudukan paksi x ke (-5) dengan cara yang sama pada langkah 3. Sekarang anda mempunyai sempadan kanan dan kiri.

Ulangi 10 langkah sebelumnya dengan sempadan atas dan bawah dan ubah kedudukan kuadrat y bukan kedudukan x. Pratonton terakhir mestilah serupa dengan yang terdapat dalam gambar.

Lihat gambar 5

Langkah 2: Menambah Papan dan Membuat Pengawal

Menambah Papan dan Membuat Pengawal
Menambah Papan dan Membuat Pengawal
Menambah Papan dan Membuat Pengawal
Menambah Papan dan Membuat Pengawal
Menambah Papan dan Membuat Pengawal
Menambah Papan dan Membuat Pengawal

Menambah Papan

Buat objek permainan baru dan namakan pemainnya 1.

Melaraskan:

  • Skala: X (1.2), Y (0.15), Z (1)
  • Kedudukan: X (0), Y (-3.6), z (0)
  • Tambah BoxCollider2D
  • Tambahkan Rigidbody 2D dan beku paksi y dan z.

Gandakan (ctrl + d) dan namakan semula pemain salin 2.

Melaraskan:

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

Lihat gambar 1

Membuat Pengawal

Anda perlu:

  • 2X Arduino Nano
  • Papan Roti Besar 2X
  • Papan Roti Kecil 2X
  • Suis Tack 4X (Butang Tekan)
  • Perintang 4X
  • Wayar Jumper Lelaki 12X ke Lelaki

Sekarang lihat foto dan pemetaan papan roti untuk memasang tongkat kegembiraan.

  1. Pasang satu cip Arduino Nano dengan papan roti kecil.
  2. pasangkan 2 suis Tack pada papan roti besar seperti yang ditunjukkan dalam gambar. Cuba simpan sebelah kanan papan roti simetri ke tangan kiri kerana ini akan menjadikan kayu bedik kelihatan lebih baik (Anda boleh menggunakan lajur ke-30 sebagai simetri garis)
  3. Sambungkan pin kiri atas butang kiri dengan pin 5V di Arduino di papan roti kecil (perkara yang disambungkan dengan lajur yang sama di papan roti dihubungkan antara satu sama lain).
  4. Sambungkan pin kanan atas butang kanan dengan pin 5V di Arduino.
  5. Sambungkan pin kanan bawah butang kiri dengan titik pada lajur ke-31 menggunakan perintang.
  6. Sambungkan pin kiri bawah butang kanan dengan titik pada lajur ke-29 menggunakan perintang.
  7. Sambungkan perintang dengan pin GND di Arduino.
  8. Sambungkan pin kanan atas butang kiri dengan pin D3 di Arduino.
  9. Sambungkan pin kiri atas butang kanan dengan pin D9 di Arduino.
  10. Sekarang ulangi langkah-langkah ini dan buat pengawal kedua.

Langkah 3: Menghubungkan Arduino ke Serial Port

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

Pertama anda perlu memasang Arduino IDE.

Setelah dipasang, anda boleh memulakan dengan membuat program Arduino yang menerima input dari butang dan menyimpannya di port Serial (port COM). Apabila papan Arduino disambungkan ke komputer riba anda, sistem operasi secara automatik mengenali papan sebagai port bersiri, di mana program boleh dimuat naik. Nilai yang tersimpan di port bersiri dapat digunakan pada langkah berikutnya ketika kita menghubungkan Unity Engine dengan port bersiri.

Sekarang mari kita sambungkan Arduino dengan port Serial.

Lihat pada gambar

  1. Sambungkan Arduino dengan komputer riba anda
  2. Alatan> Papan> Arduino Nano
  3. Sekiranya cip Arduino anda terkini (2018-2020) Alat> Pemproses> ATmega328P (Old Bootloader).
  4. Sekiranya cip Arduino anda tidak terkini (sebelum 2018) Alat> Pemproses> ATmega328P
  5. Alat> Port> COM (nombor apa pun yang muncul, dalam kes saya adalah 10). * Ini adalah port bersiri di mana nilai akan disimpan.
  6. Salin kod dan tampal di Arduino IDE dan tekan ctrl + u untuk memuat naik program.
  7. Ulangi dengan Arduino kedua. (semasa melakukan langkah 5, pastikan untuk memilih port COM lain sehingga kedua pengawal tidak akan disambungkan ke port bersiri yang sama).

Kod:

batal persediaan () {

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} gelung void () {if (digitalRead (3) == 1) {/ * Sekiranya Arduino menerima input 1 Serial.write (1); dari pin 3 Keluarkan nilai 1 ke port bersiri Serial.flush (); * / kelewatan (2); } if (digitalRead (9) == 1) {/ * Sekiranya Arduino menerima input 1 Serial.write (2); dari pin 9 Keluarkan nilai 2 ke port bersiri Serial.flush (); * / kelewatan (2); }}

Penjelasan program:

Kod ini hanya mengambil input dari pin D3 dan pin D9 di Arduino, yang disambungkan ke butang. Butang sama ada ditekan atau tidak ditekan yang bermaksud bahawa bacaan yang diambil dari mereka sama ada 1 (ditekan) atau 0 (tidak ditekan). Sekiranya input dari butang kanan (dari D9) adalah 1 (ditekan) simpan nilai 1 di port Serial. Sekiranya input dari butang kiri (dari D3) adalah 1 (ditekan) simpan nilai 2 di port Serial.

Langkah 4: Menghubungkan Perpaduan Dengan Serial Port

Menghubungkan Perpaduan Dengan Pelabuhan Bersiri
Menghubungkan Perpaduan Dengan Pelabuhan Bersiri
Menghubungkan Perpaduan Dengan Pelabuhan Bersiri
Menghubungkan Perpaduan Dengan Pelabuhan Bersiri

Untuk langkah ini kita akan mengenal pasti port bersiri di Unity sehingga dapat menerima input dari Arduino ketika butang ditekan. Pasang Kod Visual Studio pada komputer riba anda. Kemudian pergi ke Unity, pilih pemain 1 dari hierarki, tatal ke bawah dan pilih tambah komponen dan ketik player1_motion kemudian tekan enter. Lihat gambar 1

Skrip C # akan dibuat di pemeriksa, klik kanan di atasnya dan pilih skrip edit, kod studio visual harus dibuka dan akan menunjukkan kod lalai yang seperti gambar 2.

Salin kod berikut kemudian ubah "SerialPort sp = SerialPort baru (" COM10 ", 9600);" dengan SerialPort sp = SerialPort baru ("port COM yang disambungkan oleh Arduino", 9600); anda boleh menjumpainya dengan kembali ke kod Arduino anda dan menggeser Alat> Pelabuhan> COM (nombor apa sahaja yang muncul).

Kod:

menggunakan System. Collections;

menggunakan System. Collections. Generic; menggunakan UnityEngine; menggunakan System. IO. Ports; pemain kelas awam1_motion: MonoBehaviour {float speed = 8; jumlah apungan persendirian; SerialPort sp = SerialPort baru ("COM10", 9600); // Mula dipanggil sebelum kemas kini bingkai pertama dibatalkan Mula () {sp. Open (); sp. ReadTimeout = 1; } // Kemas kini dipanggil sekali per bingkai tidak sah Kemas kini () {jumlahtomove = speed * 0.01f; jika (sp. IsOpen) {cuba {moveObject (sp. ReadByte ()); cetak (sp. ReadByte ()); } tangkapan (System. Exception) {}}} batal moveObject (int Direction) {if (Direction == 1) {transform. Translate (Vector3.left * jumlahtomove, Space. World); } if (Arah == 2) {transform. Translate (Vector3.right * jumlahtomove, Space. World); }}}

Penjelasan Kod:

Kod ini memberitahu kesatuan untuk menerima input dari port bersiri (COM 10). Apabila butang kiri ditekan, Arduino mengirimkan nilai 1 ke port bersiri, jika kesatuan menerima 1 dari port bersiri, halaju ditambahkan ke objek permainan "pemain 1" ke arah kiri. Apabila butang kanan ditekan, Arduino mengirimkan nilai 2 ke port bersiri, jika kesatuan menerima 2 dari port bersiri, halaju ditambahkan ke objek permainan "pemain 1" ke arah yang benar. jika port bersiri tidak menerima nilai dari port bersiri, tidak ada halaju yang ditambahkan ke arah mana pun, maka papan tetap tidak bergerak.

Selepas anda menyalin kod tersebut tekan F5 untuk membina dan menjalankan kod tersebut. Kembali ke perpaduan dan tekan butang main, pemain 1 harus bergerak ke kanan ketika anda menekan kanan dan kiri ketika anda menekan kiri.

Sekarang, lakukan langkah yang sama sekali lagi tetapi dengan pemain 2 dan pastikan untuk menulis di 'Tambah komponen' player2_motion dan bukannya player1_motion dan untuk mengenal pasti port COM kedua yang disambungkan oleh pengawal kedua, bukan port bersiri yang sama.

Anda juga perlu menukar "public class player1_motion: MonoBehaviour" kepada "public class player2_motion: MonoBehaviour" dalam kod itu sendiri.

Langkah 5: Menambah Bola

Menambah Bola
Menambah Bola
Menambah Bola
Menambah Bola
Menambah Bola
Menambah Bola
  1. Tambahkan objek permainan baru, tetapi kali ini pilih bulatan dan bukan kotak.
  2. Namakan semula "bola".
  3. Seret dan lepaskan hierarki.
  4. Laraskan skala (X: 0.2 - Y: 0.2 - Z: 0.2).
  5. Tambahkan Rigidbody 2D dan beku paksi Z sahaja.
  6. Tukar jisim menjadi 0.0001
  7. Tukar Skala Graviti menjadi 0.
  8. Tambah Box Collider 2D.
  9. Pergi ke Aset> Buat> Bahan fizik 2D Lihat gambar 1
  10. tukar namanya menjadi "lantun"
  11. Tukar geseran menjadi sifar dari pemeriksa
  12. Tukar bounciness menjadi 1 dari pemeriksa
  13. Seret dan lepas "lantun" ke Rigidbody 2D> Bahan Lihat gambar 2
  14. Pilih "bola" sekali lagi dari hierarki dan pergi untuk menambah komponen dan ketik Ball_movement kemudian tekan enter.
  15. Klik kanan pada skrip dan pilih edit script.
  16. Salin kod di bawah dan tekan F5 untuk membina dan menjalankannya.

Kod:

menggunakan System. Collections;

menggunakan System. Collections. Generic; menggunakan UnityEngine; kelas awam Ball_movement: MonoBehaviour {// Mula dipanggil sebelum bingkai pertama mengemas kini gaya apungan peribadi = 2; batal Mula () {StartCoroutine (bergerak ()); } Pergerakan IEnumerator () {menghasilkan pulangan WaitForSeconds baru (2); GetComponent (). AddForce (Vector2 baru (1f, 0.5f) * 0.02f * force); }}

Penjelasan kod

Kod ini memberikan bola kecepatan pada kedua arah arah X dan arah Y dengan magnitud yang sama, yang membuat bola bergerak pada sudut 45 °. Pada langkah 8, kami menambahkan bahan fisika ke bola dan mengubah kelancarannya, ini menjaga pergerakan bola sepanjang permainan.

Langkah 6: Memuktamadkan Permainan

Memuktamadkan Permainan
Memuktamadkan Permainan
Memuktamadkan Permainan
Memuktamadkan Permainan
Memuktamadkan Permainan
Memuktamadkan Permainan
Memuktamadkan Permainan
Memuktamadkan Permainan

Sekarang kita perlu membuat kekalahan, jika anda menjalankan permainan, anda akan menyedari bahawa ketika bola melepasi pemain 1 atau pemain 2 ia hanya melambung di luar perbatasan dan itu tidak betul-betul yang kita perlukan dalam permainan kita. Sebaliknya kami ingin membuat penghitung skor yang menghitung skor setiap kali bola bertabrakan dengan batas atas atau bawah dan untuk mengatur semula kedudukan bola.

  1. Seret dan jatuhkan bola dari Hierarki ke Projek, Anda telah membuat prefab bola sehingga anda dapat menggunakannya nanti.
  2. Klik kanan pada Hierarki dan pilih Buat Kosong. Objek kosong akan muncul, ganti namanya menjadi bola respawn dan ubah kedudukannya agar sama dengan kedudukan bola.
  3. Klik kanan pada hierarki dan pilih UI >> Teks. Perhatikan bahawa teks menyertai kanvas kedudukan teks dalam permainan bergantung pada kedudukan teks di kanvas, bukan di batas permainan kita. (Lihat gambar 1).
  4. Tukar kedudukan teks ke tempat yang anda inginkan.
  5. Ulangi langkah 3 dan 4 sekali lagi untuk skor pemain kedua.
  6. Taipkan teks pertama "Pemain 1 Skor: 0" dan taipkan teks kedua "Pemain 2 Skor: 0". (Lihat gambar 2).
  7. Buat skrip di bahagian atas yang disebut p1wins dan salin kod berikut.

Kod:

menggunakan System. Collections;

menggunakan System. Collections. Generic; menggunakan UnityEngine; menggunakan UnityEngine. SceneManagement; menggunakan UnityEngine. UI; p1wins kelas awam: MonoBehaviour {skor Teks awam; awam Transform bola_respawn; bola GameObject awam; int peribadi p1 = 0; // Mula dipanggil sebelum pembaruan bingkai pertama tidak sah Mula () {} // Kemas kini dipanggil sekali per bingkai tidak sah Kemas kini () {skor.text = "Skor Pemain 1:" + p1; } batal OnCollisionEnter2D (Collision2D lain) {if (other.gameObject.tag == "Ball") {Destroy (other.gameObject); p1 ++; Instantiate (bola, ball_respawn.position, ball_respawn.rotation); }}}

8. Seret dan jatuhkan prefab bola dari projek pada langkah 1 ke dalam parameter Bola. (Lihat gambar 3)

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

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

Penjelasan Kod:

Apabila bola bertabrakan dengan batas atas, ia akan menghancurkan dan bergerak kembali pada posisi bola_respawn yang kita tetapkan pada langkah 2. tujuan menjadikan bola sebagai prefab adalah untuk dapat membalasnya dengan semua fiturnya, jika tidak, jika kita menggunakan bola dari hierarki ia akan bergerak semula tetapi tidak akan bergerak. Juga ketika bola bertabrakan dengan batas atas nilai yang pada asalnya sama dengan 0 disebut p1 meningkat sebanyak 1. nilai ini ditampilkan sebagai teks sehingga ketika bola bertembung dengan batas atas skor untuk pemain 1 meningkat sebanyak 1.

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

untuk langkah 7, buat skrip yang disebut p2wins dan salin kod berikut sebagai gantinya.

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

Kod:

menggunakan System. Collections;

menggunakan System. Collections. Generic; menggunakan UnityEngine; menggunakan UnityEngine. SceneManagement; menggunakan UnityEngine. UI; p2wins kelas awam: MonoBehaviour {skor Teks awam; awam Transform bola_respawn; bola GameObject awam; int peribadi p2 = 0; // Mula dipanggil sebelum kemas kini bingkai pertama tidak sah Mula () {} // Kemas kini dipanggil sekali per kemas kini bingkai tidak sah Kemas kini () {skor.text = "Skor Pemain 2:" + p2; } batal OnCollisionEnter2D (Collision2D lain) {if (other.gameObject.tag == "Ball") {Destroy (other.gameObject); p2 ++; Instantiate (bola, ball_respawn.position, ball_respawn.rotation); }}}

Disyorkan: