כיצד להכין בקר משחק מותאם אישית עם ארדואינו ואחדות

כיצד להכין בקר משחק מותאם אישית עם ארדואינו ואחדות

האם אי פעם רצית לעצב בקר משחק משלך? זה יותר קל ממה שאתה חושב!





בפרויקט קצר זה נבנה בקר משחק מותאם אישית פשוט לשימוש עם מנוע המשחק Unity. בקר זה יופעל על ידי Arduino Uno, אם כי תוכל להשתמש באחת החלופות הרבות הקיימות גם לפרויקט זה. כמו כן ניצור משחק בסיסי בו תוכלו להשתמש בבקר שלכם כדי להימנע מנפילת אובייקטים ולהאטת זמן.





לפרויקט זה תצטרך

  • Arduino או מיקרו -בקר דומה
  • נגד 10k Ohm
  • 1 x מתג רגעי
  • 1 x פוטנציומטר
  • חוטי חיבור
  • לוח לחם
  • מנוע משחק אחדות
  • התוסף Uniduino מחנות Unity Asset (30 $)
  • קוד הפרויקט השלם, למקרה שאתה לא רוצה לכתוב אותו (לא כולל את התוסף Uniduino)

רוב הדברים האלה זמינים בערכת המתנע של Arduino. אם אין לך ערכת התחלה בדוק את המדריך שלנו לבחירת המתאים ביותר עבורך.





אתה יכול להפוך את הבקר שלך למסובך כרצונך, אם כי בדוגמה זו נקים פוטנציומטר וכפתור - מושלם לשליטה במשחק ארקייד פשוט.

הרכבת הבקר שלך

הגדר את לוח הלחם ואת ארדואינו כפי שמוצג בתמונה למטה. זה מה שנשתמש בו כבקר המשחק שלנו, למרות שתוכל להשתמש כמעט באותה התקנה כמו בקר מידי DIY גַם!



הכנת הארדואינו שלך

לאחר שהכל מחובר, חבר את ה- Arduino שלך באמצעות USB. ב- IDE תוכנת Arduino ראש אל כלים> לוח ו כלים> יציאה כדי לבחור באיזה מיקרו -בקר ויציאה אתה משתמש. ה- Arduino IDE מגיע יחד עם הסקיצה שאנו זקוקים לה, ותוכל למצוא אותה מתחת קובץ> דוגמאות> Firmata> StandardFirmata . לחץ על העלה ותהיה מוכן לצאת לדרך.

אם אתה חדש בארדואינו והראש שלך נמס מעט, בדוק את שלנו מדריך למתחיל כדי לעזור לך לדבר עם המחשב שלך יפה.





הקמת פרויקט האחדות שלך

באחדות, פתח חלון> חנות נכסים כדי לגשת לחנות הנכסים של Unity מתוך עורך Unity. חפש בחנות הנכסים את התוסף Uniduino. תוסף זה יאפשר לך לקבל ולשלוח נתונים אל סיכות ה- Arduino שלך וממנה בתוך Unity. התוסף בזמן הכתיבה עולה 30 $. זה אפשרי לבצע את הפרויקט הזה מבלי לקנות את התוסף, אם כי הוא מסובך יותר ואולי תמצא את התוסף נוח יותר מכל הבחינות.

סרטון זה מבית יוצרי התוסף מעביר אותך בתהליך הבדיקה שהכל עובד, יחד עם ההתקנה הראשונה. שים לב כי ייתכן שיהיה עליך לאפס גם את עורך Unity ב- Windows.





אנו יכולים להשתמש באותו לוח בדיקה כדי לבדוק את הבקר שלנו. הגדר את סיכה D2 ל- INPUT ודיגיטלי. למטה למטה, הגדר את סיכה A5 ל- ANALOG. הפוטנציומטר והכפתור שלך אמורים להציג ערכים על המסך ליד מספרי הסיכה שלהם כעת. התקדמות!

עכשיו לעשות משהו שנוכל לשלוט בו

אז יש לנו בקר, אבל במה נשלוט? ובכן, האפשרויות הן אינסופיות, אך להיום ניצור משחק התחמקות פשוט מאוד לבדיקת מערכת הבקרה החדשה שלנו. נעבור על התקנת המשחק די מהר, כך שאם אתה חדש לגמרי במנוע Unity אתה עשוי למצוא את שלנו מדריך למתחילים של תכנות משחק אחדות שימושי כדי לקבל את המסבים שלך.

נבנה משחק בסיסי מאוד בו המטרה שלך היא להתחמק מהכדור שלך שמאלה וימינה כדי להימנע מנפילת קוביות, שינצל את הבקר המותאם אישית החדש שלך.

צור סצנה חדשה וגרור ממנה את הטרמה הטרומית Uniduino נכסים> Uniduino> Prefabs אל ההיראכיה שלך וגרור את טרומת Uniduino לתוך ההיררכיה. אנחנו צריכים את זה שם כדי לדבר בין המשחק לבקר שלנו.

בהיררכיה של אחדות לחץ צור> כדור והשתמש בכרטיסייה טרנספורמציה במפקח כדי להעביר אותה לתחתית מסך המשחק.

הגיע הזמן לקבל קידוד

עכשיו להוסיף קצת קוד למסיבה הזו. כאשר הכדור נבחר בהיררכיה, לחץ על הוסף רכיב> סקריפט חדש בתחתית חלון המפקח. תן לזה שם sphereMover ובחר ג שארפ מהתפריט הנפתח. נְקִישָׁה צור והוסף והתסריט יתווסף ל- GameObject. לחץ עליו פעמיים כדי לפתוח את הסקריפט ולהזין קוד זה:

using UnityEngine;
using System.Collections;
using Uniduino;
public class sphereMover : MonoBehaviour
{
//Headers aren't scrictly neccesary, but they make life easier back in the Inspector.
[Header('Arduino Variables')]
//we need to declare the Arduino as a variable
public Arduino arduino;
//we need to declare an integer for the pin number of our potentiometer,
//making these variables public means we can change them in the editor later
//if we change the layout of our arduino
public int potPinNumber;
//a float variable to hold the potentiometer value (0 - 1023)
public float potValue;
//we will later remap that potValue to the y position of our capsule and hold it in this variable
public float mappedPot;
//public int for our button pin
public int buttonPinNumber;
[Header('Sphere Variables')]
//variables to hold the values we noted earlier for the sides of our screen
public float leftEdge;
public float rightEdge;
// Use this for initialization
void Start ()
{//and initialize we shall, starting with the Arduino Variable.
//we are only using one arduino, so we can use Arduino.global to grab it.
arduino = Arduino.global;
arduino.Setup(ConfigurePins);
}
void ConfigurePins()
{
//configure the Arduino pin to be analog for our potentiometer
arduino.pinMode(potPinNumber, PinMode.ANALOG);
//Tell the Arduino to report any changes in the value of our potentiometer
arduino.reportAnalog(5, 1);
//configure our Button pin
arduino.pinMode(buttonPinNumber, PinMode.INPUT);
arduino.reportDigital((byte)(buttonPinNumber / 8), 1);
}
}

קח רגע לקרוא את הערות הקוד. עד כה הכרזנו כמה משתנים עבור הארדואינו שלנו, הסיכות שלו והכדור שלנו. השתמשנו גם ב-

התחל ושיטות ConfigurePins לאתחול Arduino שלנו בזמן ריצה. בוא נשמור את הסקריפט שלנו, ונחזור לעורך Unity ונראה מה השתנה.

כעת אנו יכולים לראות את המשתנים הציבוריים שלנו בחלון המפקח. בואו נראה למה נוכל להיכנס בשלב זה כדי לעזור לנו אחר כך. אנו יודעים באיזה סיכה אנו משתמשים ב- Arduino מהמבנה שלנו קודם לכן, אנו יכולים להזין אותם. אנו גם יודעים מהניסוי שלנו קודם לכן עד כמה רחוק אנו רוצים שהכדור שלנו יוכל לנסוע ימינה ושמאלה כדי שלא ייפול מהמסך. בואו להזין ערכים אלה כעת.

סימני חיים ראשונים

הגיע הזמן לראות ערכים מהארדואינו שלנו בתוך עורך האחדות. לעת עתה, נוכל להוסיף שורת קוד אחת לפונקציית העדכון של סקריפט sphereMover ולשמור את הסקריפט שוב.

void Update ()
{
//We assign the value the arduino is reading from our potentionmeter to our potValue variable
potValue = arduino.analogRead(potPinNumber);
}

כעת, כאשר משתנה potValue מתעדכן בכל מסגרת, נוכל לראות את הערך שלה בזמן אמת במפקח אחדות. לפני שנעשה את זה בדיקה, עכשיו יהיה זמן טוב לבדוק שהתקע של Uniduino מאזין ביציאה הנכונה. לחץ על Uniduino בהיררכיה ובדוק את שם הנמל במפקח. אם הוא ריק, מלא את מספר היציאה הנכון עבור Arduino שלך. במקרה זה זה היה COM4, ​​אם כי זה עשוי להיות שונה עבורך. בדוק באמצעות מזהה Arduino אם אינך בטוח.

בחר את הכדור שלך בהיררכיה ולחץ על כפתור ההפעלה בחלק העליון של המסך. המערכת זקוקה למספר שניות לאתחול, ולאחר מכן עליך להתחיל לראות את המשתנה של ערך סיר במפקח בעת הזזת הפוטנציומטר.

עכשיו אנחנו מדברים! ובכן, ביסודו של דבר אחדות והארדואינו מדברים, אבל מי סופר? אם הגעת עד כאן ואינך רואה את שינוי הערך במפקח, בדוק את שלבי ההתקנה וודא שבחרת את הפורט הנכון עבור הארדואינו שלך.

בואו נזיז את הכדור הזה

כעת, לאחר שעדיין משתנה potValue מתעדכן, אנו רוצים להשתמש בערך זה כדי להזיז את הכדור שלנו. כאשר הפוטנציומטר הוא כל הדרך לשמאל אנו רוצים שהכדור יהיה בצד שמאל של המסך, ולהיפך. אובייקטים ביחידות ממוקמים בנקודה במרחב הווקטורי, הנקבעים על פי ערכיו טרנספורמציה.מיקום . בתמונה למטה, היכן שהכדור נמצא בנקודה הרחוקה ביותר משמאל שהיינו רוצים אותו, ניתן לראות כי וקטור המיקום שלו הוא 9.5, -4, 0.

אנו רוצים להשפיע על מיקום ה- X של הכדור. למרבה הצער השימוש בערכים מהפוטנציומטר שלנו ישירות לא יעבוד, מכיוון שכאשר הפוטנציומטר נמצא כל הדרך שמאלה הוא נותן ערך של 0 - מה שיציב את הכדור שלנו באמצע המסך. בקצה השני, הערך העליון של הפוטנציומטר, 1023, יציב את הקובייה בצד ימין של המסך שלנו. לא שימושי. מה שאנחנו צריכים כאן זה קצת מתמטיקה.

מדוע לעשות מתמטיקה כאשר האחדות תעשה זאת עבורך?

לאלו מכם בחוץ הפוחדים לבהות בפיסת נייר מכוסה במספרים לא הגיוניים (למרות שיש כמה אתרים נהדרים שיכול לעזור לך ללמוד מתמטיקה), אל תפחד. אנחנו צריכים דרך להפוך את ערכי הפוטנטיומטר שלנו להתכתב עם מיקום ה- X של הכדור שלנו. למרבה המזל, אנו יכולים להשתמש ב- שיטת הרחבה .

שיטת הרחבה היא תסריט שעושה עבורנו עבודה ספציפית. במקרה זה, אנו נותנים לו את הערכים שיש לנו, והוא מחזיר אותם ממופים זה לזה, מוכן לשימוש אצלנו sphereMover תַסרִיט. בחלק העליון של החלונית Project, לחץ על צור> סקריפט C# וקראו לו ExtensionMethods. הזן את הקוד למטה בתסריט:

using UnityEngine;
using System.Collections;
public static class ExtensionMethods {

//our handy dandy Remapper function
public static float Remap (this float value, float from1, float to1, float from2, float to2)
{
return (value - from1) / (to1 - from1) * (to2 - from2) + from2;
}
}

שמור את הסקריפט וחזור לתסריט ה- sphereMover שלך. כעת אנו יכולים להשתמש בפונקציית Remap זו בסקריפט ExtensionMethods שלנו בפונקציית העדכון שלנו כדי להמיר את ערכי הפוטנטיומטר שלנו לערכים שמישים במשחק שלנו. תחת המקום שבו הקצנו את המשתנה potValue, הקלד את הדברים הבאים:

ההנחיה מראה לנו שההתאמה המחודשת שלנו לוקחת שתי קבוצות של ערכים מ- To אל וממפה אותן יחד. אנחנו יכולים להכניס את הערכים שלנו לזה.

mappedPot = potValue.Remap(0, 1023, leftEdge, rightEdge);

שמור את הסקריפט שלך, חזור לעורך Unity ולחץ על כפתור ההפעלה. כעת אתה אמור לראות שהמשתנה Mapped Pot משתנה כאשר אתה מזיז את הפוטנציומטר, כך שיתאים לערכים שקבענו עבור הקצוות השמאליים והימניים שלנו. הקדש רגע לשבת לאחור ולהודות לתסריט ExtensionMethods שלך. לא מחשבון באופק.

הערה: אם אתה מבחין שהערכים שלך הפוכים, כך שכאשר הפוטנציומטר שלך נמצא כל הדרך ימינה אתה מקבל ערך שלילי עבור משתנה ה- Pot Mapped שלך, ייתכן שתגדיר את הפוטנציומטר שלך בצורה לא נכונה. למרבה המזל, אתה יכול לתקן את זה מבלי לבצע חיווט מחדש. אתה יכול פשוט לשנות את הערכים כשאתה מחליף אותם מחדש:

עכשיו סוף סוף יש לנו ערכים שמישים. כעת כל שנותר לעשות הוא להקצות ערכים אלה למיקום ה- X של הכדור שלנו:

איך לשחק משחקי מחשב בטלוויזיה
//Assign the mapped pot value to the sphere's x position
transform.position = new Vector3(mappedPot, transform.position.y, transform.position.z);

שמור את הסקריפט שלך, חזור לעורך אחדות ולחץ על הפעל. כעת אתה אמור להיות מסוגל להזיז את הכדור שלך שמאלה וימינה באמצעות הפוטנציומטר שלך!

הכנסת הכפתור לעבודה

עכשיו כשיש לנו את הכדור שלנו לנוע, האם לא יהיה נחמד לקבל דרך להאט קצת את העניינים כשאנחנו מגיעים למקום הדוק? אנו הולכים להשתמש בכפתור שלנו כדי להאט את הזמן במשחק שלנו. פתח את הסקריפט של sphereMover והוסף קוד זה לפונקציית העדכון שלך

//if Unity detects the button is being pressed, the time scale slows down
if (arduino.digitalRead(buttonPinNumber) == 1){
Time.timeScale = 0.4f;
}
else Time.timeScale = 1.0f;

עכשיו יש לנו את המכניקה של המשחק שלנו, נוסיף כמה מכשולים! אנו הולכים להשתמש באויב הטבעי של הכדור, הקובייה. בהיררכיה, לחץ על צור> אובייקט תלת מימד> קוביה . במפקח הקובייה, הוסף רכיב> פיזיקה> Rigidbody . הגדר את ערך הגרירה של גוף הנוקשים ל- 5. כמו כן, מתחת לרכיב Box Collider במפקח, בחר Is Trigger. זה יאפשר לנו לזהות התנגשויות עם הכדור שלנו.

צור סקריפט על הקוביה וקרא לזה collideWithSphere , פתח את הסקריפט ומחק את פונקציות התחלה ועדכון מכיוון שלא נזדקק להן הפעם. הכנס את הקוד הזה:

using UnityEngine;
using System.Collections;
public class collideWithSphere : MonoBehaviour
{
void OnTriggerEnter(Collider other)
{
Destroy(other.gameObject);
}
}

OnTriggerEnter שולח הודעה בכל פעם שמפגר ההדק פוגע במתנגש אחר. במקרה זה, אנו אומרים לו להרוס כל מה שהוא נוגע בו. שמור את הסקריפט וחזור לעורך Unity. גרור את הקוביה מההיררכיה לחלונית Project. תבחין שהטקסט של הקוביה בהיררכיה הפך לכחול. הסיבה לכך היא שיצרנו טרומית ושמרנו אותה בפרויקט שלנו. מחק את הקוביה שלך מההיררכיה כעת.

כל מה שאנחנו צריכים עכשיו זה תסריט להשרות הקוביות. בהיררכיה לחץ צור> צור ריק , ושנה את שמו ל- Game Manager במפקח והוסף לו סקריפט שנקרא gameManager. פתח את הסקריפט והוסף קוד זה:

using UnityEngine;
using System.Collections;
public class gameManager : MonoBehaviour {
//a variable to hold the prefab we want to spawn
public GameObject cube;
//we want some variables to decide how any cubes to spawn
//and how high above us we want them to spawn
public int numberToSpwan;
public float lowestSpawnheight;
public float highestSpawnheight;
// Use this for initialization
void Start ()
{
for (int i = 0; i {
Instantiate(cube, new Vector3(Random.Range(-9, 9), Random.Range(lowestSpawnheight, highestSpawnheight), 0), Quaternion.identity);
}
}

// Update is called once per frame
void Update ()
{

}
}

שמור את התסריט. בחזרה לעורך, בחר את מנהל המשחקים בהיררכיה וגרור את הטרמה הקובית שלך מלוח הפרויקט למשתנה Cube במפקח. מלא גם כאן את הערכים להשרצה שלך. אתה יכול להתעסק עם זה כדי שיהיה לך קשה או קל כרצונך. שים לב שכדאי שהקוביות הנמוכות ביותר שלך יציצו גבוהות מספיק כדי לאפשר ליונידואינו לאתחל - הפסד במשחק לפני שתוכל לזוז עשוי להיות מתסכל!

הפרויקט המוגמר

עכשיו כשאתה לוחץ על play, הקוביות יצנחו מעליך ויפלו. אתה יכול להשתמש בפוטנציומטר שלך כדי להימנע מהם, ובכפתור שלך להאט את הזמן.

בפרויקט זה יצרנו בקר מותאם אישית עם Arduino, הגדרנו את Unity ו- Uniduino לתקשר איתו, ויצרנו משחק פשוט לבדיקה. ניתן ליישם את המושגים כאן כמעט על כל פרויקט, ויש אפילו חסימות משחק המתמחות בבקרים מותאמים אישית .

עם Arduino ו- Unity תוכל ליצור בקר מותאם אישית כמעט מכל דבר. יצרתם Hi-Fi ששולט בחללית? טוסטר ששולט במשחק פלטפורמה?

אם עשית פרויקט כזה אשמח לראות אותו! פרסם אותו בתגובות למטה!

לַחֲלוֹק לַחֲלוֹק צִיוּץ אימייל 6 חלופות קוליות: אפליקציות ספרי האודיו הטובות ביותר בחינם או הזולות

אם לא בא לך לשלם עבור ספרי שמע, הנה כמה אפליקציות נהדרות המאפשרות לך להאזין להן בחינם ולפי חוק.

קרא הבא
נושאים קשורים
  • עשה זאת בעצמך
  • תִכנוּת
  • ארדואינו
  • שלט משחק
  • פיתוח משחק
על הסופר איאן באקלי(פורסמו 216 מאמרים)

איאן באקלי הוא עיתונאי, מוזיקאי, מבצע ומפיק וידאו עצמאי המתגורר בברלין, גרמניה. כשהוא לא כותב או על במה, הוא מתעסק עם מוצרי אלקטרוניקה DIY או קוד בתקווה להפוך למדען מטורף.

עוד מאת איאן באקלי

הירשם לניוזלטר שלנו

הצטרף לניוזלטר שלנו לקבלת טיפים, סקירות, ספרים אלקטרוניים בחינם ומבצעים בלעדיים!

לחצו כאן להרשמה