Mundarija:

Arduino tekshirgichlari yordamida ko'p o'yinchi o'yinini qanday qilish kerak: 6 qadam
Arduino tekshirgichlari yordamida ko'p o'yinchi o'yinini qanday qilish kerak: 6 qadam

Video: Arduino tekshirgichlari yordamida ko'p o'yinchi o'yinini qanday qilish kerak: 6 qadam

Video: Arduino tekshirgichlari yordamida ko'p o'yinchi o'yinini qanday qilish kerak: 6 qadam
Video: MKS Gen L - Marlin 1 1 9 (configuration.h) 2024, Iyul
Anonim
Arduino tekshirgichlari yordamida ko'p o'yinchi o'yinini qanday qilish kerak
Arduino tekshirgichlari yordamida ko'p o'yinchi o'yinini qanday qilish kerak

O'yin ishlab chiqaruvchilari qanday qilib butun dunyo bo'ylab odamlar o'ynashni yoqtiradigan ajoyib o'yinlarni yaratishi haqida hech o'ylab ko'rganmisiz? Xo'sh, bugun men sizga Arduino boshqaruvchisi boshqaradigan kichik o'yinchi o'yini yaratib, bu haqda sizga kichik maslahat beraman. Shunday qilib, boshlaylik.

Ta'minotlar

Sizga kerak bo'ladi:

  • Noutbuk
  • Birlik dvigateli
  • Birlik bilan ishlaydigan C# IDE, masalan, Visual studio yoki Atom. (Men Visual Studio kodidan foydalanaman)
  • 2X Arduino Nano
  • 2X katta non taxtasi
  • 2X kichik non taxtasi
  • 4X tugmachasi (bosish tugmasi)
  • 4X 200Ω qarshilik
  • 12X Erkak -Erkak o'tish simlari
  • Arduino IDE

Agar siz Unity -ni ishlatishning asosiy tushunchasiga ega bo'lsangiz, bu foydali bo'ladi, lekin bu sizning yutuqlaringizga ta'sir qilmaydi, chunki siz o'yinni davom ettirayotganingizda u bilan tanishasiz.

Unity Engine -ni yuklab olish uchun havola:

store.unity.com/download-nuo

Visual Studio Code IDE -ni yuklab olish uchun havola:

code.visualstudio.com/download

Arduino IDE -ni yuklab olish uchun havola:

www.arduino.cc/en/Main/Software

1 -qadam: O'yin chegaralarini o'rnating

O'yin chegaralarini o'rnatish
O'yin chegaralarini o'rnatish
O'yin chegaralarini o'rnatish
O'yin chegaralarini o'rnatish
O'yin chegaralarini o'rnatish
O'yin chegaralarini o'rnatish

Birinchidan, siz birlikni yuklab olishingiz kerak

Bu bajarilgandan so'ng, siz o'yin ko'rinishini sozlashni boshlashingiz mumkin.

Yangi Unity loyihasini oching, unga nom bering va 2D o'yinini tanlang.

Loyiha ochilganda, 3 ta asosiy bo'lim deb nomlanganiga e'tibor bering

  • Ierarxiya (bu erda sizning barcha o'yin ob'ektlaringiz va tafsilotlaringiz qo'shiladi).
  • Sahna (bu erda siz o'yin ko'rinishini o'rnatasiz).
  • O'yin (haqiqiy o'yin qanday o'tishini sinab ko'rishingiz mumkin).

E'tibor bering, ierarxiya ostida sizning sahnangiz va sahnaning ostida "Asosiy kamera" joylashgan. Ierarxiyadan kamerani tanlaganingizda, u sahnada tanlanadi

(Bu kamera chegarasidagi hamma narsa haqiqiy o'yinda ko'rsatiladi).

1 -rasmga qarang

Bizning o'yinimiz ikkita taxtadan, atrofida harakatlanadigan to'pdan va taxtalar va to'pning harakatini cheklaydigan chegaralardan iborat.

Chegaralarni yaratishdan boshlaylik.

  1. Yangi o'yin ob'ektini yaratish uchun Aktivlar> Yaratish> Sprites> kvadrat -ni tanlang ("o'ng va chap chegaralar" deb nomlang) 2 -rasmga qarang.
  2. O'ng va chap chegaralarni ierarxiyaga tortib qo'ying va sahnada kvadrat paydo bo'ladi.
  3. Uning x o'qi o'rnini (5) "o'ng va chap chegaralar"> inspektor> o'zgartirish> pozitsiyasi> X ga sozlang. 3 -rasmga qarang
  4. Keyin o'lchamini kameraning chegaralarini yopadigan darajada kattalashtiring (kvadratning yuqori va pastki tomonlarini torting).
  5. Uning rangini "o'ng va chap chegaradan"> inspektor> sprite render> rangini o'zgartiring. 3 -rasmga qarang
  6. Tekshiruvchini pastga aylantiring va komponentani qo'shish -ni tanlang, keyin Rigidbody2D -ni kiriting va Enter -ni bosing, bu sizning o'yin ob'ektingizga fizika qo'shadi, chunki u massa, tortishish va to'qnashuvni aniqlaydi. Ammo o'yinda bizga tortish kuchi kerak emas, shuning uchun tortishish kuchini 0 ga aylantiring. Shuningdek, pozitsiya va aylanishni muzlatish kerak bo'ladi, shunda chegara to'qnashganda harakat qilmaydi. 4 -rasmga qarang
  7. Qo'shish komponentasini tanlang, keyin Box Collider 2D kiriting va Enter tugmasini bosing, bu o'yin ob'ektining atrofida to'qnashuvlarni aniqlash mumkin bo'lgan maydonni qo'shadi. 4 -rasmga qarang
  8. Endi o'ng va chap chegaralarni tanlang va uni takrorlash uchun (ctrl+d) bosing.
  9. Uni "chap chegara" deb o'zgartiring va birinchisining nomini o'zgartiring ("o'ng chegara").
  10. Chap chegarani tanlang va x o'qining o'rnini (-5) ga 3-qadamda aylantiring. Endi sizda o'ng va chap chegaralar bor.

Oldingi 10 qadamni yuqoriga va pastga chegaralar bilan takrorlang va x pozitsiyasi o'rniga kvadratning y holatini o'zgartiring. Oxirgi ko'rish rasmdagi kabi bo'lishi kerak.

5 -rasmga qarang

2 -qadam: Kengashlarni qo'shish va nazoratchilarni yaratish

Kengashlarni qo'shish va nazoratchilarni yaratish
Kengashlarni qo'shish va nazoratchilarni yaratish
Kengashlarni qo'shish va nazoratchilarni yaratish
Kengashlarni qo'shish va nazoratchilarni yaratish
Kengashlarni qo'shish va nazoratchilarni yaratish
Kengashlarni qo'shish va nazoratchilarni yaratish

Kengashlarni qo'shish

Yangi o'yin ob'ektini yarating va uni o'yinchi 1 deb nomlang.

Sozlang:

  • O'lchov: X (1.2), Y (0.15), Z (1)
  • Lavozim: X (0), Y (-3.6), z (0)
  • BoxCollider2D qo'shing
  • Rigidbody 2D qo'shing va y va z o'qlarini muzlatib qo'ying.

Ko'paytirish (ctrl+d) va nusxa ko'chirish pleyerining nomini o'zgartiring 2.

Sozlang:

  • O'lchov: X (1.2), Y (0.15), Z (1)
  • Lavozim: X (0), Y (3.6), z (0)
  • BoxCollider allaqachon u erda bo'ladi.
  • Rigidbody 2D allaqachon bo'ladi va y va z o'qlari allaqachon muzlatilgan bo'ladi.

1 -rasmga qarang

Nazoratchilarni tayyorlash

Sizga kerak bo'ladi:

  • 2X Arduino Nano
  • 2X katta non taxtasi
  • 2X kichik non taxtasi
  • 4X tugmachasi (bosish tugmasi)
  • 4X qarshilik
  • 12X Erkak -Erkak o'tish simlari

Endi joystiklarni yig'ish uchun non taxtasining fotosuratlari va xaritalariga qarang.

  1. Kichkina non taxtasi bilan bitta Arduino Nano chipini ulang.
  2. Rasmda ko'rsatilgandek katta non taxtasida 2 ta tugmachani joylashtiring. Non taxtasining o'ng tomonini chap tomonga nosimmetrik tutishga harakat qiling, chunki bu joystikni yaxshiroq ko'rinishiga olib keladi (30 -ustundan simmetriya sifatida foydalanishingiz mumkin). chiziq)
  3. Chap tugmachaning yuqori chap burchagini kichik non taxtasidagi Arduino-dagi 5V pin bilan ulang (xuddi shu ustun bilan bog'langan narsalar bir-biriga ulangan).
  4. O'ng tugmachaning yuqori o'ng burchagini Arduino-dagi 5V pin bilan ulang.
  5. Chap tugmachaning pastki o'ng burchagini rezistor yordamida 31-ustunning nuqtasi bilan ulang.
  6. O'ng tugmachaning pastki chap burchagini rezistor yordamida 29-ustunning nuqtasi bilan ulang.
  7. Rezistorlarni Arduino -dagi GND pin bilan ulang.
  8. Chap tugmachaning yuqori o'ng burchagini Arduino-dagi D3 pin bilan ulang.
  9. O'ng tugmachaning yuqori chap burchagini D9 pinli Arduino-ga ulang.
  10. Endi bu amallarni takrorlang va ikkinchi boshqaruvchini qiling.

3 -qadam: Arduino -ni seriyali portga ulash

Arduino -ni seriyali portga ulash
Arduino -ni seriyali portga ulash
Arduino -ni seriyali portga ulash
Arduino -ni seriyali portga ulash
Arduino -ni seriyali portga ulash
Arduino -ni seriyali portga ulash
Arduino -ni seriyali portga ulash
Arduino -ni seriyali portga ulash

Avval siz Arduino IDE -ni o'rnatishingiz kerak.

Ular o'rnatilgandan so'ng, siz tugmachalardan kirishni qabul qiladigan Arduino dasturini ishga tushirishingiz va ularni ketma -ket portda (COM portida) saqlashingiz mumkin. Noutbukga Arduino platasi ulanganda, operatsion tizim platani avtomatik ravishda ketma -ket port sifatida tan oladi, unga dasturlarni yuklash mumkin. Seriyali portda saqlangan qiymatlar keyingi bosqichda Unity Engine -ni ketma -ket portga ulaganda ishlatilishi mumkin.

Endi Arduino -ni Seriya porti bilan bog'laymiz.

Rasmlarga qarang

  1. Arduino -ni noutbukga ulang
  2. Asboblar> Kengash> Arduino Nano
  3. Agar sizning Arduino chipingiz yangi bo'lsa (2018-2020) Asboblar> Protsessor> ATmega328P (Old Bootloader).
  4. Agar sizning Arduino chipingiz yaqinda bo'lmasa (2018 yilgacha) Asboblar> Protsessor> ATmega328P
  5. Asboblar> Port> COM (har qanday raqam paydo bo'lsa, mening holatimda 10). * Bu qiymatlar saqlanadigan ketma -ket port.
  6. Kodni nusxa ko'chiring va Arduino IDE -ga joylashtiring va dasturni yuklash uchun ctrl+u tugmalarini bosing.
  7. Ikkinchi Arduino bilan takrorlang. (5 -qadamni bajarayotganda, boshqa MAQOMOTI portini tanlaganingizga ishonch hosil qiling, shunda ikkala kontroller ham bir xil ketma -ket portga ulanmaydi).

Kod:

bo'sh o'rnatish () {

Serial.begin (9600); pinMode (3, INPUT); // Arduino -ga D3 pinMode (9, INPUT) pinidan kirishni qabul qilishni aytish; // Arduino -ga D9 pinidan kirishni qabul qilishni aytib berish} void loop () {if (digitalRead (3) == 1) { /* Agar Arduino 1 Serial.write (1) kirishini qabul qilsa; pin 3 dan Serial.flush () ketma -ket portiga 1 qiymatini chiqaring; */ kechikish (2); } if (digitalRead (9) == 1) { /* Agar Arduino 1 Serial.write (2) kirishini qabul qilsa; pin 9dan Serial.flush () ketma -ket portiga 2 qiymatini chiqaring; */ kechikish (2); }}

Dasturning izohi:

Bu kod Arduino -dagi tugmachalarga ulangan D3 pin va D9 pinidan ma'lumot oladi. Tugmalar bosiladi yoki bosilmaydi, demak ulardan olingan o'qishlar 1 (bosilgan) yoki 0 (bosilmagan). Agar o'ng tugmachadan (D9 dan) kirish 1 (bosilgan) bo'lsa, Serial portda 1 qiymatini saqlang. Agar chap tugmachadan (D3 dan) kirish 1 (bosilgan) bo'lsa, ketma -ket portda 2 qiymatini saqlang.

4 -qadam: Birlikni ketma -ket port bilan ulash

Birlikni ketma -ket port bilan ulash
Birlikni ketma -ket port bilan ulash
Birlikni ketma -ket port bilan ulash
Birlikni ketma -ket port bilan ulash

Ushbu qadam uchun biz Unity -dagi ketma -ket portni aniqlaymiz, shunda u tugmalar bosilganda Arduino -dan kirishni qabul qiladi. Laptopda Visual Studio kodini o'rnating. Unity -ga o'ting, ierarxiyadan 1 -o'yinchini tanlang, pastga siljiting va komponentani qo'shish -ni tanlang va player1_motion -ni kiriting, so'ngra enter -ni bosing. 1 -rasmga qarang

Inspektorda C# skript yaratiladi, sichqonchaning o'ng tugmachasini bosing va tahrirlash skriptini tanlang, vizual studiya kodi ochilishi kerak va 2 -rasmga o'xshash standart kodni ko'rsatadi.

Quyidagi kodni nusxa ko'chiring, so'ng "SerialPort sp = new SerialPort (" COM10 ", 9600) ni o'zgartiring;" SerialPort sp = yangi SerialPort bilan ("Arduino ulangan COM porti", 9600); Siz uni Arduino kodingizga qaytish va Asboblar> Port> COM ga o'tish orqali topishingiz mumkin.

Kod:

System. Collections -dan foydalanish;

System. Collections. Generic -dan foydalanish; UnityEngine -dan foydalanish; System. IO. Ports -dan foydalanish; public class player1_motion: MonoBehaviour {suzish tezligi = 8; shaxsiy suzuvchi sumkasi; SerialPort sp = yangi SerialPort ("COM10", 9600); // Start birinchi kadrni yangilashdan oldin chaqiriladi void Start () {sp. Open (); sp. ReadTimeout = 1; } // Yangilanish har bir kvadrat uchun bir marta chaqiriladi void Update () {amounttomove = tezlik*0.01f; if (sp. IsOpen) {harakat qilib ko'ring {moveObject (sp. ReadByte ()); chop etish (sp. ReadByte ()); } catch (System. Exception) {}}} void moveObject (int Direction) {if (Direction == 1) {transform. Translate (Vector3.left*amounttomove, Space. World); } if (Yo'nalish == 2) {transform. Translate (Vector3.right*amounttomove, Space. World); }}}

Kodning izohi:

Bu kod ketma -ket portdan (COM 10) kirishni qabul qilish uchun birlikni bildiradi. Chap tugma bosilganda, Arduino ketma -ket portga 1 qiymatini yuboradi, agar birlik birlik portidan 1 qabul qilsa, "1 -o'yinchi" o'yin ob'ektiga chap tomonga tezlik qo'shiladi. O'ng tugma bosilganda, Arduino ketma -ket portga 2 qiymatini yuboradi, agar birlik birlik portidan 2 qabul qilsa, "1 -o'yinchi" o'yin ob'ektiga to'g'ri yo'nalishda tezlik qo'shiladi. Agar ketma -ket port ketma -ket portdan qiymat olmagan bo'lsa, tezlik ikki tomonga qo'shilmaydi, shuning uchun taxta harakatsiz qoladi.

Kodni nusxalashdan so'ng kodni yaratish va ishga tushirish uchun F5 tugmasini bosing. Birlikka qayting va o'ynash tugmachasini bosing, 1 -o'yinchi o'ngga, chapga bosganingizda chapga siljishi kerak.

Endi, xuddi shu qadamlarni yana 2 -o'yinchi bilan bajaring va player1_motion o'rniga 'Komponent qo'shish' player2_motion -ga yozishni va bir xil ketma -ket portni emas, balki ikkinchi boshqaruvchi ulangan ikkinchi COM portini aniqlashni unutmang.

Bundan tashqari, kodning o'zida "public class player1_motion: MonoBehaviour" ni "public class player2_motion: MonoBehaviour" ga o'zgartirish kerak bo'ladi.

5 -qadam: to'pni qo'shish

To'pni qo'shish
To'pni qo'shish
To'pni qo'shish
To'pni qo'shish
To'pni qo'shish
To'pni qo'shish
  1. Yangi o'yin ob'ektini qo'shing, lekin bu safar kvadrat o'rniga aylana tanlang.
  2. Uning nomini "to'p" deb o'zgartiring.
  3. Ierarxiyani sudrab olib tashlang.
  4. O'lchovni sozlang (X: 0,2 - Y: 0,2 - Z: 0,2).
  5. Rigidbody 2D qo'shing va faqat Z o'qini muzlatib qo'ying.
  6. Massani 0.0001 ga o'zgartiring
  7. Gravitatsiya shkalasini 0 ga o'zgartiring.
  8. Box Collider 2D qo'shing.
  9. Aktivlar> Yaratish> Fizika materiallari bo'limiga o'ting 2D 1 -rasmga qarang
  10. uning nomini "sakrash" ga o'zgartiring
  11. Nazoratchining ishqalanishini nolga o'zgartiring
  12. Tekshiruvchidan sakrashni 1 ga o'zgartiring
  13. Rigidbody 2D> Material -ga "sakrash" ni sudrab tashla 2 -rasmga qarang
  14. Ierarxiyadan yana "to'p" ni tanlang va komponentni qo'shish uchun o'ting va Ball_movement yozing va Enter tugmasini bosing.
  15. Skriptni o'ng tugmasini bosing va skriptni tahrirlashni tanlang.
  16. Quyidagi kodni nusxa ko'chiring va uni yaratish va ishga tushirish uchun F5 tugmasini bosing.

Kod:

System. Collections -dan foydalanish;

System. Collections. Generic -dan foydalanish; UnityEngine -dan foydalanish; umumiy sinf Ball_movement: MonoBehaviour {// Start birinchi kadrni yangilashdan oldin chaqiriladi xususiy suzuvchi kuch = 2; void Start () {StartCoroutine (move ()); } IEnumerator move () {rent return new WaitForSeconds (2); GetComponent (). AddForce (yangi Vector2 (1f, 0,5f)*0,02f*kuch); }}

Kodni tushuntirish

Bu kod to'pni har ikki yo'nalishda ham bir xil kattalikdagi X yo'nalishi va Y yo'nalishi bo'yicha tezligini beradi, bu esa to'pni 45 ° burchak ostida harakatga keltiradi. 8 -qadamda biz to'pga fizika materialini qo'shdik va uning sakrashini o'zgartirdik, bu o'yin davomida to'pning harakatini saqlaydi.

6 -qadam: O'yinni yakunlash

O'yinni yakunlash
O'yinni yakunlash
O'yinni yakunlash
O'yinni yakunlash
O'yinni yakunlash
O'yinni yakunlash
O'yinni yakunlash
O'yinni yakunlash

Endi biz yutqazish imkoniyatini berishimiz kerak, agar siz o'yinni o'tkazsangiz, to'p 1 -o'yinchi yoki 2 -o'yinchi o'tib ketganda, u chegaradan sakrab tushayotganini sezasiz va bu bizning o'yinimizda kerak emas. Buning o'rniga biz har safar to'p yuqoriga yoki pastga chegaralar bilan to'qnashganda hisobni hisoblaydigan hisoblagich yaratmoqchimiz va to'pning o'rnini tiklamoqchimiz.

  1. To'pni ierarxiyadan tortib loyihaga torting, siz to'pni prefabrik qilib qo'ydingiz, shundan keyin uni ishlatishingiz mumkin.
  2. Ierarxiyani o'ng tugmasini bosing va bo'sh joy yaratish -ni tanlang. bo'sh ob'ekt paydo bo'ladi, uni to'pni qayta tiklash deb o'zgartiring va uning o'rnini to'pning pozitsiyasiga o'xshash qilib o'zgartiring.
  3. Ierarxiyani o'ng tugmasini bosing va UI >> Matn -ni tanlang. E'tibor bering, matn tuval bilan birga keladi, o'yindagi matnning joylashuvi bizning o'yinimiz chegarasida emas, balki tuvaldagi matnning joylashishiga bog'liq. (1 -rasmga qarang).
  4. Matn o'rnini xohlagan joyingizga o'zgartiring.
  5. Ikkinchi o'yinchi uchun 3 va 4 -qadamlarni takrorlang.
  6. Birinchi matnga "1 -o'yinchi: 0:" yozing va ikkinchi matnga "2 -o'yinchi bahosi: 0" yozing. (2 -rasmga qarang).
  7. P1wins deb nomlangan yuqori chegarada skript yarating va quyidagi kodni nusxa ko'chiring.

Kod:

System. Collections -dan foydalanish;

System. Collections. Generic -dan foydalanish; UnityEngine -dan foydalanish; UnityEngine. SceneManagement -dan foydalanish; UnityEngine. UI -dan foydalanish; umumiy sinf p1wins: MonoBehaviour {ommaviy Matn ballari; public transform ball_respawn; ommaviy GameObject to'pi; shaxsiy int p1 = 0; // Boshlash birinchi kadrni yangilashdan oldin chaqiriladi void Start () {} // Yangilash har bir kvadrat uchun bir marta chaqiriladi void Update () {score.text = "1 -o'yinchi bahosi:" + p1; } void OnCollisionEnter2D (Collision2D other) {if (other.gameObject.tag == "Ball") {Destroy (other.gameObject); p1 ++; Tezkor qilish (to'p, to'pni qaytarish. Pozitsiya, to'pni qaytarish). }}}

8. 1 -qadamdagi loyihadan to'pni prefabrikasini Ball parametriga torting. (3 -rasmga qarang)

9. To'pni qayta tiklanish ierarxiyasidan Ball-rerspawn parametriga torting. (3 -rasmga qarang)

10. o'yinchi 1 ballni ierarxiyadan Score parametriga sudrab olib tashlang. (3 -rasmga qarang)

Kodning izohi:

To'p yuqori chegara bilan to'qnashganda, biz 2 -bosqichda tayinlangan ball_respawn pozitsiyasida yana vayron qiladi va qaytadan tug'iladi, to'pni prefabrik holga keltirishning maqsadi, agar biz to'pni ishlatgan bo'lsak, uni qayta tiklay olamiz. ierarxiyadan u qayta tiklanadi, lekin u qimirlamaydi. To'p yuqori chegara bilan to'qnashganda, dastlab 0 ga teng bo'lgan qiymat p1 deb ataladi, bu qiymat 1 ga oshadi, shuning uchun to'p yuqori chegara bilan to'qnashganda 1 -o'yinchi uchun ball 1 ga oshadi.

Endi pastki chegara uchun 7, 8, 9 va 10 -qadamlarni bajaring

7 -qadam uchun p2wins deb nomlangan skript yarating va uning o'rniga quyidagi kodni nusxa ko'chiring.

10 -qadam uchun, o'yinchi 2 ballini ierarxiyadan Score parametriga sudrab olib tashlang.

Kod:

System. Collections -dan foydalanish;

System. Collections. Generic -dan foydalanish; UnityEngine -dan foydalanish; UnityEngine. SceneManagement -dan foydalanish; UnityEngine. UI -dan foydalanish; umumiy sinf p2wins: MonoBehaviour {ommaviy matnli ballar; public transform ball_respawn; ommaviy GameObject to'pi; shaxsiy int p2 = 0; // Ishga tushirish birinchi kadr yangilanishidan oldin chaqiriladi void Start () {} // Yangilash har bir kadr uchun bir marta chaqiriladi void Update () {score.text = "2 -o'yinchi bahosi:" + p2; } void OnCollisionEnter2D (Collision2D other) {if (other.gameObject.tag == "Ball") {Destroy (other.gameObject); p2 ++; Tezkor qilish (to'p, to'pni qaytarish. Pozitsiya, to'pni qaytarish). }}}

Tavsiya: