فهرست مطالب:

نحوه ساخت بازی چند نفره با کنترلرهای آردوینو: 6 مرحله
نحوه ساخت بازی چند نفره با کنترلرهای آردوینو: 6 مرحله
Anonim
چگونه با کنترلرهای آردوینو یک بازی چند نفره بسازیم
چگونه با کنترلرهای آردوینو یک بازی چند نفره بسازیم

آیا تا به حال فکر کرده اید که چگونه توسعه دهندگان بازی ها بازی های شگفت انگیزی را خلق می کنند که مردم جهان از انجام آن لذت می برند؟ خوب ، امروز من قصد دارم با ساخت یک بازی چند نفره کوچک که توسط کنترلر آردوینو که شما نیز آن را کنترل خواهید کرد ، فقط یک راهنمایی کوچک در مورد آن ارائه کنم. بنابراین ، اجازه دهید شروع کنیم.

تدارکات

شما نیاز خواهید داشت:

  • یک لپ تاپ
  • موتور وحدت
  • C# IDE که با Unity مانند ویژوال استودیو یا Atom کار می کند. (من از Visual Studio Code استفاده خواهم کرد)
  • 2X آردوینو نانو
  • 2X تخته نان بزرگ
  • 2X تخته نان کوچک
  • سوئیچ 4X Tack (دکمه فشار)
  • مقاومت 4X 200Ω
  • سیمهای بلوز نر به نر 12X
  • آردوینو IDE

اگر درک اولیه ای از استفاده از Unity داشته باشید ، مفید خواهد بود ، با این حال این امر بر پیشرفت شما تأثیر نمی گذارد زیرا در حین ساخت بازی با آن آشنا می شوید.

لینک دانلود Unity Engine:

store.unity.com/download-nuo

لینک دانلود Visual Studio Code IDE:

code.visualstudio.com/download

لینک دانلود Arduino IDE:

www.arduino.cc/fa/Main/Software

مرحله 1: مرزهای بازی را تنظیم کنید

مرزهای بازی را تنظیم کنید
مرزهای بازی را تنظیم کنید
مرزهای بازی را تنظیم کنید
مرزهای بازی را تنظیم کنید
مرزهای بازی را تنظیم کنید
مرزهای بازی را تنظیم کنید

اول از همه ، شما باید یونیتی را بارگیری کنید

پس از انجام این کار می توانید تنظیم نمای بازی خود را شروع کنید.

یک پروژه جدید Unity باز کنید ، نام آن را بگذارید و بازی 2D را انتخاب کنید.

هنگامی که پروژه باز می شود ، توجه داشته باشید که 3 بخش اصلی وجود دارد

  • سلسله مراتب (این جایی است که همه اشیا و جزئیات بازی شما اضافه می شود).
  • صحنه (جایی که نمای بازی را تنظیم می کنید).
  • بازی (که در آن می توانید نحوه بازی واقعی را آزمایش کنید).

توجه داشته باشید که زیر سلسله مراتب صحنه شما وجود دارد و در زیر صحنه "دوربین اصلی" وجود دارد. هنگامی که دوربین را از سلسله مراتب انتخاب می کنید ، در صحنه انتخاب می شود

(هر چیزی در محدوده این دوربین در بازی واقعی نشان داده می شود).

به تصویر 1 نگاه کنید

بازی ما شامل دو تخته است ، یک توپ که در اطراف حرکت می کند و حاشیه هایی که حرکت تخته و توپ را محدود می کند.

بیایید با ایجاد مرزها شروع کنیم.

  1. برای ایجاد یک شیء بازی جدید ، Assets> Create> Sprites> square (نام آن را "حاشیه راست و چپ" انتخاب کنید) به تصویر 2 نگاه کنید
  2. مرزهای راست و چپ را به سلسله مراتب بکشید و رها کنید و یک مربع در صحنه ظاهر می شود.
  3. موقعیت محور x را به (5) "مرزهای راست و چپ"> بازرس> تبدیل> موقعیت> X تنظیم کنید. به تصویر 3 نگاه کنید
  4. سپس مقیاس آن را به اندازه ای بزرگ کنید که بتواند حاشیه های دوربین را بپوشاند (قسمت های بالا و پایین مربع را بکشید تا کشیده شود).
  5. رنگ آن را "از مرزهای راست و چپ"> بازرس> sprite render> رنگ را تنظیم کنید. به تصویر 3 نگاه کنید
  6. در قسمت بازرس به پایین بروید و add component را انتخاب کنید ، Rigidbody2D را تایپ کرده و enter را فشار دهید ، این امر اساساً فیزیک را به شی بازی شما اضافه می کند زیرا به آن جرم ، گرانش و تشخیص برخورد را می دهد. با این حال ما در بازی خود به گرانش نیاز نداریم ، بنابراین جاذبه را به جای 1 بسازید. همچنین باید موقعیت و چرخش را فریز کنید تا مرز هنگام برخورد با یکدیگر حرکت نکند. به تصویر 4 نگاه کنید
  7. افزودن جزء را انتخاب کرده سپس Box Collider 2D را تایپ کرده و enter را فشار دهید تا ناحیه ای در اطراف شی بازی اضافه شود که در آن برخورد ها قابل تشخیص است. به تصویر 4 نگاه کنید
  8. حالا حاشیه های راست و چپ را انتخاب کرده و (ctrl+d) را فشار دهید تا تکراری شود.
  9. نام آن را "مرز چپ" تغییر دهید و نام اول ("مرز راست") را تغییر دهید.
  10. حاشیه سمت چپ را انتخاب کرده و موقعیت محور x آن را در (-5) با همان روش در مرحله 3 تنظیم کنید. حالا مرزهای راست و چپ دارید.

10 مرحله قبلی را با حاشیه بالا و پایین تکرار کنید و موقعیت y را به جای موقعیت x تغییر دهید. پیش نمایش نهایی باید چیزی شبیه به تصویر موجود در تصویر باشد.

به تصویر 5 نگاه کنید

مرحله 2: اضافه کردن تابلوها و ساخت کنترلرها

اضافه کردن تابلوها و ساخت کنترلرها
اضافه کردن تابلوها و ساخت کنترلرها
افزودن برد و ساخت کنترلر
افزودن برد و ساخت کنترلر
اضافه کردن تابلوها و ساخت کنترلرها
اضافه کردن تابلوها و ساخت کنترلرها

افزودن تخته

یک شیء بازی جدید بسازید و نام آن را 1 بگذارید.

تنظیم کنید:

  • مقیاس: X (1.2) ، Y (0.15) ، Z (1)
  • موقعیت: X (0) ، Y (-3.6) ، z (0)
  • BoxCollider2D را اضافه کنید
  • Rigidbody 2D را اضافه کرده و محورهای y و z را فریز کنید.

کپی (ctrl+d) و نام دستگاه پخش کپی 2.

تنظیم کنید:

  • مقیاس: X (1.2) ، Y (0.15) ، Z (1)
  • موقعیت: X (0) ، Y (3.6) ، z (0)
  • یک BoxCollider در حال حاضر وجود دارد.
  • Rigidbody 2D از قبل وجود دارد و محورهای y و z قبلاً یخ زده اند.

به تصویر 1 نگاه کنید

ساخت کنترلرها

شما نیاز خواهید داشت:

  • 2X آردوینو نانو
  • 2X تخته نان بزرگ
  • 2X تخته نان کوچک
  • سوئیچ 4X Tack (دکمه فشار)
  • مقاومت 4X
  • سیمهای بلوز نر به نر 12X

حالا به عکسها و نقشه های نان برای مونتاژ جوی استیک ها نگاه کنید.

  1. یک تکه آردوینو نانو را با یک تخته نان کوچک وصل کنید.
  2. همانطور که در تصویر نشان داده شده است 2 سوئیچ Tack را روی تخته نان بزرگ وصل کنید. سعی کنید سمت راست تخته نان را به سمت چپ متقارن نگه دارید زیرا این امر باعث می شود جوی استیک بهتر به نظر برسد (می توانید از ستون 30 به عنوان تقارن استفاده کنید خط)
  3. پین بالا سمت چپ دکمه سمت چپ را با پین 5 ولت در آردوینو روی تخته نان کوچک وصل کنید (چیزهایی که با همان ستون در نان برد متصل شده اند به یکدیگر متصل شده اند).
  4. پین بالا سمت راست دکمه سمت راست را با پین 5 ولت در آردوینو وصل کنید.
  5. پین پایین سمت راست دکمه سمت چپ را با یک نقطه در ستون 31 با استفاده از مقاومت وصل کنید.
  6. پین پایین سمت چپ دکمه سمت راست را با یک نقطه در ستون 29 با استفاده از مقاومت وصل کنید.
  7. مقاومت ها را با پین GND در آردوینو وصل کنید.
  8. پین بالا سمت راست دکمه سمت چپ را با پین D3 در آردوینو وصل کنید.
  9. پین بالا سمت چپ دکمه سمت راست را با پین D9 در آردوینو وصل کنید.
  10. حالا این مراحل را تکرار کرده و کنترلر دوم را بسازید.

مرحله 3: اتصال آردوینو به پورت سریال

اتصال آردوینو به پورت سریال
اتصال آردوینو به پورت سریال
اتصال آردوینو به پورت سریال
اتصال آردوینو به پورت سریال
اتصال آردوینو به پورت سریال
اتصال آردوینو به پورت سریال
اتصال آردوینو به پورت سریال
اتصال آردوینو به پورت سریال

ابتدا باید Arduino IDE را نصب کنید.

پس از نصب ، می توانید با ایجاد یک برنامه آردوینو که ورودی ها را از دکمه ها دریافت می کند ، شروع کرده و آنها را در یک پورت سریال (پورت COM) ذخیره کنید. هنگامی که یک برد آردوینو به لپ تاپ شما متصل است ، سیستم عامل به طور خودکار این برد را به عنوان یک پورت سریال می شناسد ، که برنامه ها را می توان در آنها بارگذاری کرد. مقادیر ذخیره شده در پورت سریال را می توان در مرحله بعد هنگامی که Unity Engine را به پورت سریال متصل می کنیم ، استفاده کرد.

حالا بیایید آردوینو را با پورت Serial متصل کنیم.

به تصاویر نگاه کنید

  1. یک آردوینو را با لپ تاپ خود متصل کنید
  2. ابزارها> برد> آردوینو نانو
  3. اگر تراشه Arduino شما جدید است (2018-2020) ابزارها> پردازنده> ATmega328P (قدیمی بوت لودر).
  4. اگر تراشه Arduino شما جدید نیست (قبل از 2018) ابزارها> پردازنده> ATmega328P
  5. Tools> Port> COM (هر تعداد که ظاهر شود ، در مورد من 10 است). * این پورت سریال است که مقادیر در آن ذخیره می شوند.
  6. کد را کپی کرده و در Arduino IDE بچسبانید و ctrl+u را فشار دهید تا برنامه بارگذاری شود.
  7. با آردوینو دوم این کار را تکرار کنید. (هنگام انجام مرحله 5 مطمئن شوید که پورت COM دیگری را انتخاب کنید تا هر دو کنترلر به یک پورت سریال متصل نشوند).

کد:

void setup () {

Serial.begin (9600)؛ pinMode (3 ، ورودی) ؛ // گفتن Arduino برای دریافت ورودی از پین D3 pinMode (9 ، INPUT) ؛ // گفتن به آردوینو برای دریافت ورودی از پین D9} حلقه void () {if (digitalRead (3) == 1) { /* اگر Arduino ورودی 1 Serial.write (1) دریافت کند ؛ از پین 3 مقدار 1 را به پورت سریال Serial.flush () خروجی دهید. */ تاخیر (2) ؛ } if (digitalRead (9) == 1) { /* اگر Arduino ورودی 1 Serial.write (2) دریافت کند ؛ از پین 9 خروجی مقدار 2 به پورت سریال Serial.flush ()؛ */ تاخیر (2) ؛ }}

توضیحات برنامه:

این کد به سادگی از پین D3 و پین D9 در آردوینو که به دکمه ها متصل شده اند ، ورودی می گیرد. دکمه ها یا فشرده هستند یا فشرده نمی شوند ، بدین معنی که خوانش هایی که از آنها گرفته می شود 1 (فشرده) یا 0 (فشرده نشده) هستند. اگر ورودی از دکمه سمت راست (از D9) 1 باشد (فشار داده شده) مقدار 1 را در پورت سریال ذخیره کنید. اگر ورودی از دکمه سمت چپ (از D3) 1 است (فشار داده شده) مقدار 2 را در پورت سریال ذخیره کنید.

مرحله 4: اتصال Unity با پورت سریال

اتصال یونیتی با پورت سریال
اتصال یونیتی با پورت سریال
اتصال یونیتی با پورت سریال
اتصال یونیتی با پورت سریال

برای این مرحله ما قصد داریم پورت سریال را در Unity شناسایی کنیم تا بتواند با فشار دادن دکمه ها ورودی های Arduino را دریافت کند. Visual Studio Code را روی لپ تاپ خود نصب کنید. سپس به Unity بروید ، پخش کننده 1 را از سلسله مراتب انتخاب کنید ، به پایین بروید و افزودن جزء را انتخاب کنید و player1_motion را تایپ کنید و سپس enter را فشار دهید. به تصویر 1 نگاه کنید

یک اسکریپت C# در بازرس ایجاد می شود ، روی آن راست کلیک کرده و ویرایش اسکریپت را انتخاب کنید ، کد ویژوال استودیو باید باز شود و یک کد پیش فرض شبیه تصویر 2 نشان می دهد.

کد زیر را کپی کرده و "SerialPort sp = new SerialPort (" COM10 "، 9600)؛" با SerialPort sp = SerialPort جدید ("پورت COM که آردوینو شما به آن متصل است" ، 9600) ؛ با بازگشت به کد Arduino و ابزارها> Port> COM (هر شماره ای که ظاهر شود) می توانید وی را پیدا کنید.

کد:

با استفاده از System. Collections ؛

با استفاده از System. Collections. Generic؛ استفاده از UnityEngine ؛ با استفاده از System. IO. Ports ؛ public class player1_motion: MonoBehaviour {float speed = 8؛ مقدار شناور خصوصی SerialPort sp = SerialPort جدید ("COM10" ، 9600) ؛ // Start قبل از اولین به روزرسانی فریم فراخوانی می شود void Start () {sp. Open ()؛ sp. ReadTimeout = 1؛ } // Update یک بار در هر فریم نامیده می شود void Update () {amounttomove = speed*0.01f؛ if (sp. IsOpen) {try {moveObject (sp. ReadByte ())؛ چاپ (sp. ReadByte ()) ؛ } catch (System. Exception) {}}} void moveObject (int Direction) {if (Direction == 1) {transform. Translate (Vector3.left*amounttomove، Space. World)؛ } if (جهت == 2) {transform. Translate (Vector3.right*amounttomove، Space. World)؛ }}}

توضیح کد:

این کد به وحدت می گوید که ورودی ها را از پورت سریال (COM 10) دریافت کند. وقتی دکمه سمت چپ فشار داده می شود ، آردوینو مقدار 1 را به پورت سریال ارسال می کند ، اگر واحد 1 را از پورت سریال دریافت کند ، یک سرعت به جهت بازی "player 1" در جهت چپ اضافه می شود. وقتی دکمه سمت راست فشار داده می شود ، آردوینو مقدار 2 را به پورت سریال ارسال می کند ، اگر واحد 2 را از پورت سریال دریافت کند ، یک سرعت در جهت مناسب به شی بازی "player 1" اضافه می شود. اگر پورت سریال مقداری از پورت سریال دریافت نکند ، هیچ سرعتی در هیچ دو جهت اضافه نمی شود ، بنابراین صفحه ثابت می ماند.

بعد از کپی کردن کد F5 را فشار دهید تا کد ایجاد و اجرا شود. به حالت وحدت برگردید و دکمه پخش را فشار دهید ، بازیکن 1 هنگام فشار دادن راست و چپ هنگام فشار دادن به چپ باید به سمت راست حرکت کند.

اکنون ، مراحل مشابه را یکبار دیگر انجام دهید ، اما با پخش کننده 2 و مطمئن شوید که در "افزودن جزء" player2_motion به جای player1_motion بنویسید و دومین پورت COM که کنترلر دوم به آن متصل است را مشخص کنید ، نه همان پورت سریال.

همچنین باید "class class player1_motion: MonoBehaviour" را به "public class player2_motion: MonoBehaviour" در خود کد تغییر دهید.

مرحله 5: اضافه کردن توپ

اضافه کردن توپ
اضافه کردن توپ
اضافه کردن توپ
اضافه کردن توپ
اضافه کردن توپ
اضافه کردن توپ
  1. یک شیء بازی جدید اضافه کنید ، اما این بار یک دایره را به جای مربع انتخاب کنید.
  2. نام آن را "توپ" تغییر دهید.
  3. در سلسله مراتب بکشید و رها کنید.
  4. مقیاس را تنظیم کنید (X: 0.2 - Y: 0.2 - Z: 0.2).
  5. یک Rigidbody 2D اضافه کنید و فقط محور Z را منجمد کنید.
  6. جرم را به 0.0001 تغییر دهید
  7. مقیاس جاذبه را به 0 تغییر دهید.
  8. یک جعبه برخورد 2 بعدی اضافه کنید.
  9. به Assets> Create> Physics material 2D بروید به تصویر 1 نگاه کنید
  10. نام آن را به "bounce" تغییر دهید
  11. اصطکاک را از بازرس به صفر تغییر دهید
  12. قابلیت بازده را از 1 بازرس به 1 تغییر دهید
  13. "bounce" را بکشید و رها کنید به Rigidbody 2D> Material به تصویر 2 نگاه کنید
  14. دوباره "ball" را از سلسله مراتب انتخاب کرده و به قسمت افزودن کامپوننت رفته و Ball_movement را تایپ کرده سپس enter را فشار دهید.
  15. روی اسکریپت راست کلیک کرده و ویرایش اسکریپت را انتخاب کنید.
  16. کد زیر را کپی کرده و F5 را فشار دهید تا ساخته و اجرا شود.

کد:

با استفاده از System. Collections ؛

با استفاده از System. Collections. Generic؛ استفاده از UnityEngine ؛ کلاس عمومی Ball_movement: MonoBehaviour {// Start قبل از اولین بروزرسانی فریم فراخوانی می شود private float force = 2؛ void Start () {StartCoroutine (move ())؛ } IEnumerator move () {yield return new WaitForSeconds (2)؛ GetComponent (). AddForce (بردار جدید 2 (1f ، 0.5f)*0.02f*نیرو) ؛ }}

توضیح کد

این کد به توپ در هر دو جهت جهت X و جهت Y با همان قدر سرعت می دهد ، که باعث می شود توپ در زاویه 45 درجه حرکت کند. در مرحله 8 ما یک ماده فیزیکی به توپ اضافه کردیم و تندرستی آن را تغییر دادیم ، این حرکت توپ را در خارج از بازی حفظ می کند.

مرحله 6: نهایی کردن بازی

نهایی کردن بازی
نهایی کردن بازی
نهایی کردن بازی
نهایی کردن بازی
نهایی کردن بازی
نهایی کردن بازی
نهایی کردن بازی
نهایی کردن بازی

در حال حاضر ما باید باخت را ممکن کنیم ، اگر بازی را اجرا کنید متوجه خواهید شد که وقتی توپ از بازیکن 1 یا بازیکن 2 عبور می کند فقط از مرز خارج می شود و این دقیقاً چیزی نیست که ما در بازی خود به آن نیاز داریم. در عوض ما می خواهیم یک شمارنده امتیاز ایجاد کنیم که هر بار که توپ با مرزهای بالا یا پایین برخورد می کند ، امتیاز را شمارش می کند و موقعیت توپ را بازنشانی می کند.

  1. توپ را از سلسله مراتب به پروژه بکشید و رها کنید ، شما یک پیش ساخته از توپ تهیه کرده اید تا بعداً بتوانید از آن استفاده کنید.
  2. روی Hierarchy راست کلیک کرده و Create Empty را انتخاب کنید. یک شیء خالی ظاهر می شود ، نام آن را به respawn توپ تغییر می دهد و موقعیت آن را به همان موقعیت توپ تغییر می دهد.
  3. روی سلسله مراتب راست کلیک کرده و UI >> Text را انتخاب کنید. توجه داشته باشید که متن با بوم همراه است ، موقعیت متن در بازی بستگی به موقعیت متن در بوم دارد ، نه در حاشیه بازی ما. (به تصویر 1 نگاه کنید).
  4. موقعیت متن را به هر کجا که می خواهید تغییر دهید.
  5. مراحل 3 و 4 را دوباره برای امتیاز بازیکن دوم تکرار کنید.
  6. در متن اول "امتیاز بازیکن 1: 0" و متن دوم "امتیاز بازیکن 2: 0" را تایپ کنید. (به تصویر 2 نگاه کنید).
  7. یک اسکریپت در بالا به نام p1wins ایجاد کنید و کد زیر را کپی کنید.

کد:

با استفاده از System. Collections ؛

با استفاده از System. Collections. Generic؛ استفاده از UnityEngine ؛ با استفاده از UnityEngine. SceneManagement ؛ استفاده از UnityEngine. UI ؛ کلاس عمومی p1 پیروز می شود: MonoBehaviour {نمره متن عمومی ؛ public transform ball_respawn؛ توپ GameObject عمومی ؛ خصوصی int p1 = 0؛ // Start قبل از اولین به روزرسانی فریم فراخوانی می شود void Start () {} // به روز رسانی یک بار در هر فریم خالی به روز می شود Update () {score.text = "امتیاز بازیکن 1:" + p1؛ } void OnCollisionEnter2D (Collision2D other) {if (other.gameObject.tag == "توپ") {نابود کردن (other.gameObject) ؛ p1 ++ ؛ Instantiate (ball، ball_respawn.position ، ball_respawn.rotation) ؛ }}}

8. پیش ساخته توپ را از پروژه مرحله 1 به پارامتر Ball بکشید و رها کنید. (به تصویر 3 نگاه کنید)

9. بازگرداندن توپ از سلسله مراتب به پارامتر Ball-rerspawn. (به تصویر 3 نگاه کنید)

10. نمره بازیکن 1 را از سلسله مراتب به پارامتر Score بکشید و رها کنید. (به تصویر 3 نگاه کنید)

توضیح کد:

هنگامی که توپ با حاشیه فوقانی برخورد می کند ، دوباره از بین می رود و مجددا در موقعیت ball_respawn که در مرحله 2 تعیین کردیم ، تخریب می شود و مجدداً بار می آید. از سلسله مراتب دوباره ظاهر می شود اما حرکت نمی کند. همچنین وقتی توپ با حاشیه بالایی برخورد می کند ، مقداری که در اصل برابر 0 است به نام p1 به میزان 1 افزایش می یابد. این مقدار به صورت متن نمایش داده می شود ، بنابراین هنگامی که توپ با حاشیه بالایی برخورد می کند ، امتیاز بازیکن 1 1 افزایش می یابد.

اکنون مراحل 7 ، 8 ، 9 و 10 را برای مرز پایین انجام دهید

برای مرحله 7 ، یک اسکریپت به نام p2wins ایجاد کنید و به جای آن کد زیر را کپی کنید.

برای مرحله 10 ، نمره بازیکن 2 را از سلسله مراتب به پارامتر Score بکشید و رها کنید.

کد:

با استفاده از System. Collections ؛

با استفاده از System. Collections. Generic؛ استفاده از UnityEngine ؛ استفاده از UnityEngine. SceneManagement ؛ استفاده از UnityEngine. UI ؛ کلاس عمومی p2 برنده می شود: MonoBehaviour {نمره متن عمومی ؛ public transform ball_respawn؛ توپ GameObject عمومی ؛ خصوصی int p2 = 0؛ // Start قبل از اولین به روزرسانی فریم فراخوانی می شود void Start () {} // به روزرسانی یک بار در هر فریم باطل فراخوانی می شود Update () {score.text = "امتیاز بازیکن 2:" + p2؛ } void OnCollisionEnter2D (Collision2D other) {if (other.gameObject.tag == "توپ") {نابود کردن (other.gameObject) ؛ p2 ++ ؛ Instantiate (ball، ball_respawn.position ، ball_respawn.rotation) ؛ }}}

توصیه شده: