Kā izveidot pielāgotu spēļu kontrolieri, izmantojot Arduino un Unity

Kā izveidot pielāgotu spēļu kontrolieri, izmantojot Arduino un Unity

Vai esat kādreiz vēlējies izveidot savu spēļu kontrolieri? Tas ir vieglāk, nekā jūs domājat!





Šajā īsajā projektā mēs izveidosim vienkāršu pielāgotu spēļu kontrolieri, ko izmantot kopā ar Unity spēļu dzinēju. Šo kontrolieri darbinās Arduino Uno, lai gan šim projektam jūs varētu izmantot arī vienu no daudzajām alternatīvām. Mēs arī izveidosim pamata spēli, kurā izmantosit savu kontrolieri, lai izvairītos no krītošiem objektiem un palēninātu laiku.





Šim projektam jums būs nepieciešams

  • Arduino vai līdzīgs mikrokontrolleris
  • 1 x 10k omu rezistors
  • 1 x īslaicīgs slēdzis
  • 1 x potenciometrs
  • Savienojami vadi
  • Maizes dēlis
  • Vienotības spēles dzinējs
  • Uniduino spraudnis no Unity Asset Store (30 ASV dolāri)
  • Pabeigt projekta kodu, ja nevēlaties to izrakstīt (neietver Uniduino spraudni)

Lielākā daļa no šīm lietām ir pieejamas Arduino sākuma komplektā. Ja jums nav sākuma komplekta, izlasiet mūsu ceļvedi, lai izvēlētos sev piemērotāko.





Jūs varat padarīt savu kontrolieri tik sarežģītu, cik vēlaties, lai gan šajā piemērā mēs uzstādīsim potenciometru un pogu - ideāli piemēroti vienkāršas arkādes spēles vadīšanai.

Kontroliera salikšana

Iestatiet savu maizes dēli un Arduino, kā parādīts attēlā zemāk. To mēs izmantosim kā savu spēļu kontrolieri, lai gan jūs varētu izmantot gandrīz tādu pašu iestatījumu kā a DIY midi kontrolieris arī!



Arduino sagatavošana

Kad viss ir savienots, pievienojiet Arduino, izmantojot USB. Arduino programmatūrā IDE dodieties uz Rīki> Padome un Rīki> Ports lai izvēlētos izmantoto mikrokontrolleru un portu. Arduino IDE ir komplektā ar mums nepieciešamo skici, un to varat atrast zemāk Fails> Piemēri> Firmata> StandardFirmata . Noklikšķiniet uz Augšupielādēt, un jūs būsit gatavs darbam.

Ja esat jauns Arduino lietotājs un jūsu galva nedaudz kūst, apskatiet mūsu Iesācēja ceļvedis lai palīdzētu jums labi sarunāties ar datoru.





Vienotības projekta iestatīšana

Vienotībā atveriet Logs> Aktīvu veikals lai piekļūtu Unity Asset Store no Unity Editor. Meklējiet Uniduino spraudni aktīvu veikalā. Šis spraudnis ļaus jums saņemt un nosūtīt datus uz un no jūsu Arduino tapām Unity. Rakstīšanas laikā spraudnis maksā 30 USD. Tas ir iespējams lai veiktu šo projektu, nepērkot spraudni, lai gan tas ir diezgan sarežģīts, un, iespējams, spraudnis būs ērtāks.

Šis videoklips no spraudņa veidotājiem ļauj jums pārbaudīt, kā viss darbojas, kā arī iestatīt pirmo reizi. Ņemiet vērā, ka jums, iespējams, būs jāatiestata arī Unity redaktors operētājsistēmā Windows.





Mēs varam izmantot šo pašu testa paneli, lai pārbaudītu mūsu kontrolieri. Iestatiet tapu D2 uz INPUT un Digital. Tālāk uz leju iestatiet tapu A5 uz ANALOG. Potenciometram un pogai tagad ekrānā jāparāda vērtības blakus to pin numuriem. Progress!

Tagad darīsim kaut ko tādu, ko varam kontrolēt

Tātad mums ir kontrolieris, bet ko mēs kontrolēsim? Iespējas ir bezgalīgas, taču šodien mēs izveidosim ļoti vienkāršu izvairīšanās spēli, lai pārbaudītu mūsu jauno vadības sistēmu. Mēs diezgan ātri pāriesim pie spēles iestatīšanas, tādēļ, ja esat pilnīgi jauns Unity dzinējs, jūs varat atrast mūsu Vienotības spēļu programmēšanas ceļvedis iesācējiem noderīgi, lai iegūtu savus uzskatus.

Mēs izveidosim ļoti vienkāršu spēli, kurā jūsu mērķis ir izvairīties no jūsu sfēras pa kreisi un pa labi, lai izvairītos no kubu krišanas, un tiks izmantots jūsu jaunizveidotais pielāgotais kontrolieris.

Izveidojiet jaunu ainu un velciet Uniduino saliekamo elementu no Aktīvi> Uniduino> Saliekamās detaļas savā hierachy un velciet Uniduino saliekamo elementu hierarhijā. Mums tas ir vajadzīgs, lai sarunātos starp mūsu spēli un kontrolieri.

Vienotības hierarhijā noklikšķiniet uz Izveidot> Sfēra un izmantojiet cilni Pārveidot inspektorā, lai to pārvietotu uz spēles ekrāna apakšdaļu.

Ir pienācis laiks iegūt kodējumu

Tagad pievienojiet šai partijai kādu kodu. Kad sfēra ir atlasīta hierarhijā, noklikšķiniet uz Pievienot komponentu> Jauns skripts inspektora loga apakšā. Nosauciet to sphereMover un izvēlieties C Sharp no nolaižamās izvēlnes. Klikšķis Izveidot un pievienot un skripts tiks pievienots GameObject. Veiciet dubultklikšķi uz tā, lai atvērtu skriptu, un ievadiet šo kodu:

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);
}
}

Veltiet laiku, lai izlasītu koda komentārus. Līdz šim mēs esam paziņojuši dažus mainīgos mūsu Arduino, tā tapām un mūsu sfērai. Mēs esam izmantojuši arī

Sāciet un konfigurējietPins metodes, lai inicializētu mūsu Arduino izpildes laikā. Saglabāsim mūsu skriptu un atgriezīsimies Unity redaktorā un redzēsim, kas ir mainījies.

Tagad inspektora logā mēs varam redzēt mūsu publiskos mainīgos. Apskatīsim, ko mēs varam ievadīt šajā posmā, lai palīdzētu mums vēlāk. Mēs zinām, kādus tapas mēs izmantojam Arduino no mūsu būves agrāk, un mēs varam tos ievadīt. No iepriekš veiktā eksperimenta mēs arī zinām, cik tālu mēs vēlamies, lai mūsu sfēra varētu pārvietoties pa kreisi un pa labi, lai tā nenokristu no ekrāna. Tagad ievadīsim šīs vērtības.

Pirmās dzīvības pazīmes

Ir pienācis laiks vienotības redaktorā faktiski redzēt mūsu Arduino vērtības. Pagaidām mēs varam pievienot vienu koda rindiņu mūsu sphereMover skripta atjaunināšanas funkcijai un saglabāt skriptu vēlreiz.

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

Tagad, kad mūsu mainīgais potValue tiek atjaunināts katrā kadrā, mēs varam redzēt tā vērtību reāllaikā vienības inspektorā. Pirms mēs to pārbaudām, tagad būtu īstais laiks pārbaudīt, vai Uniduino spraudnis klausās pareizajā portā. Heirarhijā noklikšķiniet uz Uniduino un pārbaudiet inspektora porta nosaukumu. Ja tas ir tukšs, ievadiet pareizo Arduino porta numuru. Šajā gadījumā tas bija COM4, ​​lai gan jums tas var būt atšķirīgs. Ja neesat pārliecināts, pārbaudiet, izmantojot Arduino IDE.

Hierarhijā atlasiet savu sfēru un ekrāna augšdaļā noklikšķiniet uz pogas Atskaņot. Sistēmas inicializēšanai nepieciešamas dažas sekundes, pēc tam, pārvietojot potenciometru, jums vajadzētu redzēt, kā mainās katla vērtība.

Tagad mēs runājam! Nu, stingri runājot, Vienotība un Arduino runā, bet kurš skaitās? Ja esat nonācis tik tālu un neredzat inspektora vērtību izmaiņas, pārbaudiet iestatīšanas darbības un pārliecinieties, vai jūsu Arduino ir izvēlēts pareizais ports.

Pārvietojam šo sfēru

Tagad, kad tiek atjaunināts mainīgais potValue, mēs vēlamies izmantot šo vērtību, lai pārvietotu savu sfēru. Kad potenciometrs ir līdz galam pa kreisi, mēs vēlamies, lai sfēra atrastos ekrāna kreisajā pusē un otrādi. Vienotības objekti tiek novietoti vektoru telpas punktā, ko nosaka tā vērtības Pārveidot.pozīciju . Zemāk redzamajā attēlā, kur sfēra atrodas vistālākajā punktā pa kreisi, ko mēs to vēlētos, jūs varat redzēt, ka tās pozīcijas vektors ir 9,5, -4, 0.

Mēs vēlamies ietekmēt sfēras X pozīciju. Diemžēl tieša mūsu potenciometra vērtību izmantošana nedarbosies, jo, kad potenciometrs ir līdz galam pa kreisi, tas dod vērtību 0 - kas mūsu sfēru novietotu tieši ekrāna vidū. Otrajā galējībā potenciometra augstākā vērtība - 1023 - novietotu kubu mūsu ekrāna labajā pusē. Nav lietderīgi. Šeit mums ir nepieciešama matemātika.

Kāpēc matemātika, kad Vienotība to darīs jūsu vietā?

Tiem no jums, kas baidās skatīties uz papīra gabalu, kas pārklāts ar absurdiem skaitļiem (lai gan ir daži lieliskas vietnes kas var palīdzēt mācīties matemātiku), nebaidieties. Mums ir nepieciešams veids, kā padarīt mūsu potenciometra vērtības atbilstošas ​​mūsu sfēras X pozīcijai. Par laimi, mēs varam izmantot Pagarināšanas metode .

Paplašināšanas metode ir skripts, kas mūsu vietā veic noteiktu darbu. Šajā gadījumā mēs tam piešķiram savas vērtības, un tas atgriež tās, kas ir savstarpēji kartētas, gatavas lietošanai mūsu sphereMover skripts. Projekta paneļa augšdaļā noklikšķiniet uz Izveidot> C# skripts un nosauciet to par ExtensionMethods. Ievadiet zemāk esošo kodu skriptā:

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;
}
}

Saglabājiet skriptu un atgriezieties savā sphereMover skriptā. Tagad mēs varam izmantot šo Remap funkciju mūsu ExtensionMethods skriptā mūsu atjaunināšanas funkcijā, lai mūsu potenciometra vērtības pārvērstu par izmantojamām vērtībām mūsu spēlē. Vietā, kur mēs tikko piešķīrām mainīgo potValue, ierakstiet šo:

Uzvedne parāda mums, ka mūsu Remap izmanto divas vērtību no un uz vērtību kopas un kartē tās kopā. Mēs varam tajā iekļaut savas vērtības.

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

Saglabājiet skriptu, atgriezieties Unity redaktorā un nospiediet atskaņošanas pogu. Tagad jums vajadzētu redzēt, ka mainītā katla mainīgais mainās, kad pārvietojat potenciometru, lai tas atbilstu vērtībām, kuras mēs noteicām kreisajai un labajai malai. Veltiet laiku, lai atpūstos un pateiktos savam ExtensionMethods skriptam. Nav redzams kalkulators.

Piezīme: ja pamanāt, ka jūsu vērtības ir apgrieztas, un, kad potenciometrs ir līdz galam pa labi, mainītā katla mainīgajam tiek parādīta negatīva vērtība, iespējams, potenciometrs ir iestatīts nepareizi. Par laimi, jūs varat to novērst, neveicot atkārtotu vadu pievienošanu. Jūs varat vienkārši mainīt vērtības, kad tās pārveidojat:

Tagad mums beidzot ir izmantojamas vērtības. Tagad atliek tikai piešķirt šīs vērtības mūsu sfēras X pozīcijai:

aveņu pi 3b vs 3b+
//Assign the mapped pot value to the sphere's x position
transform.position = new Vector3(mappedPot, transform.position.y, transform.position.z);

Saglabājiet skriptu, atgriezieties Unity redaktorā un nospiediet atskaņot. Tagad jums vajadzētu būt iespējai pārvietot savu sfēru pa kreisi un pa labi, izmantojot potenciometru!

Pogas ievietošana darbā

Vai tagad, kad sfēra virzās uz priekšu, nebūtu jauki, ja būtu veids, kā mazliet palēnināt situāciju, nonākot saspringtajā vietā? Mēs izmantosim savu pogu, lai palēninātu spēles laiku. Atveriet savu sphereMover skriptu un pievienojiet šo kodu atjaunināšanas funkcijai

//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;

Tagad mums ir mūsu spēles mehānika, pievienosim dažus šķēršļus! Mēs izmantosim sfēras dabisko ienaidnieku - kubu. Hierarhijā noklikšķiniet uz Izveidot> 3D objekts> Kubs . Kuba inspektorā, Pievienojiet komponentu> Fizika> Rigidbody . Iestatiet cietā korpusa vilkšanas vērtību uz 5. Arī inspektora zem kastes sadursmes komponenta atlasiet Is Trigger. Tas ļaus mums atklāt sadursmes ar mūsu sfēru.

Izveidojiet skriptu uz kuba un izsauciet to collideWithSphere , atveriet skriptu un izdzēsiet sākuma un atjaunināšanas funkcijas, jo šoreiz tās mums nebūs vajadzīgas. Ievadiet šo kodu:

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

OnTriggerEnter sūta ziņojumu ikreiz, kad sprūda sadursme sasniedz citu kolaideru. Šajā gadījumā mēs sakām, lai tas iznīcina visu, kam tas pieskaras. Saglabājiet skriptu un dodieties atpakaļ uz Unity redaktoru. Velciet kubu no hierarhijas uz paneli Projekts. Jūs pamanīsit, ka hierarhijas kuba teksts ir kļuvis zils. Tas ir tāpēc, ka mēs esam izveidojuši saliekamo materiālu un saglabājuši to savā projektā. Izdzēsiet savu kubu no hierarhijas tūlīt.

Viss, kas mums tagad ir vajadzīgs, ir skripts kubu nārstošanai. Hierarhijā noklikšķiniet uz Izveidot> Izveidot tukšu , un pārdēvē to par Spēļu pārvaldnieku un pievienojiet tam skriptu ar nosaukumu gameManager. Atveriet skriptu un pievienojiet šo kodu:

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 ()
{

}
}

Saglabājiet skriptu. Atpakaļ redaktorā hierarhijā atlasiet Spēļu pārvaldnieks un velciet kuba saliekamo elementu no projekta paneļa uz mainīgo Cube inspektorā. Arī šeit aizpildiet nārsta vērtības. Jūs varat vijole ar to, lai padarītu to tik grūti vai viegli, cik vēlaties. Ņemiet vērā, ka ir vērts, lai jūsu zemākie kubi būtu pietiekami augsti, lai Uniduino varētu inicializēt - spēles zaudēšana pirms pārvietošanās var būt nomākta!

Pabeigtais projekts

Tagad, nospiežot play, kubi nārsto virs jums un nokrīt. Varat izmantot potenciometru, lai no tiem izvairītos, un pogu, lai palēninātu laiku.

Šajā projektā mēs esam izveidojuši pielāgotu kontrolieri ar Arduino, konfigurējuši Unity un Uniduino, lai ar to sazinātos, un izveidojām vienkāršu spēli, lai to pārbaudītu. Šeit minētos jēdzienus var izmantot gandrīz jebkuram projektam, un tie ir pat spēļu ievārījumi, kas specializējas pielāgotos kontrolieros .

Izmantojot Arduino un Unity, jūs varētu izveidot pielāgotu kontrolieri no gandrīz jebkura. Vai esat izveidojis hi-fi, kas kontrolē kosmosa kuģi? Tosteris, kas kontrolē platformas spēli?

Ja esat izveidojis šādu projektu, es labprāt to redzētu! Publicējiet to zemāk esošajos komentāros!

Kopīgot Kopīgot Čivināt E -pasts 6 dzirdamas alternatīvas: labākās bezmaksas vai lētas audiogrāmatu lietotnes

Ja jums nepatīk maksāt par audiogrāmatām, šeit ir dažas lieliskas lietotnes, kas ļauj tās klausīties bez maksas un likumīgi.

Lasīt Tālāk
Saistītās tēmas
  • DIY
  • Programmēšana
  • Arduino
  • Spēļu kontrolieris
  • Spēļu izstrāde
Par autoru Īans Baklijs(Publicēti 216 raksti)

Īans Baklijs ir ārštata žurnālists, mūziķis, izpildītājs un video producents, kas dzīvo Berlīnē, Vācijā. Kad viņš neraksta vai nav uz skatuves, viņš ķeras pie DIY elektronikas vai koda, cerot kļūt par traku zinātnieku.

Vairāk no Īana Baklija

Abonējiet mūsu biļetenu

Pievienojieties mūsu informatīvajam izdevumam, lai iegūtu tehniskus padomus, pārskatus, bezmaksas e -grāmatas un ekskluzīvus piedāvājumus!

Noklikšķiniet šeit, lai abonētu
Kategorija Diy