{"id":65627,"date":"2022-08-29T00:17:44","date_gmt":"2022-08-29T05:17:44","guid":{"rendered":"https:\/\/blogging-techies.com\/sw\/hur-man-gor-en-anpassad-spelkontroll-med-arduino-och-unity\/"},"modified":"2022-08-29T00:17:44","modified_gmt":"2022-08-29T05:17:44","slug":"hur-man-gor-en-anpassad-spelkontroll-med-arduino-och-unity","status":"publish","type":"post","link":"https:\/\/blogging-techies.com\/sw\/hur-man-gor-en-anpassad-spelkontroll-med-arduino-och-unity\/","title":{"rendered":"Hur man g\u00f6r en anpassad spelkontroll med Arduino och Unity"},"content":{"rendered":"<div>\n<p>Har du n\u00e5gonsin velat designa din egen spelkontroll?  Det \u00e4r l\u00e4ttare \u00e4n du tror!<\/p>\n<p>I det h\u00e4r korta projektet kommer vi att bygga en enkel anpassad spelkontroll att anv\u00e4nda med Unity-spelmotorn.  Den h\u00e4r kontrollern kommer att drivas av en Arduino Uno, \u00e4ven om du kan anv\u00e4nda ett av de m\u00e5nga alternativen som finns f\u00f6r detta projekt ocks\u00e5.  Vi kommer ocks\u00e5 att skapa ett grundl\u00e4ggande spel d\u00e4r du kommer att anv\u00e4nda din handkontroll f\u00f6r att undvika fallande f\u00f6rem\u00e5l och sakta ner tiden.<\/p>\n<h2 id=\"for-this-project-you-will-need\"><span class=\"ez-toc-section\" id=\"For_detta_projekt_behover_du\"><\/span>  F\u00f6r detta projekt beh\u00f6ver du<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>  Arduino eller liknande mikrokontroller 1 x 10k Ohm motst\u00e5nd 1 x Momentan switch 1 x Potentiometer Hook-up ledningar En breadboard Unity spelmotor Uniduino plugin fr\u00e5n Unity Asset Store ($30) Komplett projektkod, ifall du inte vill skriva ut den (Inkluderar inte Uniduino-plugin)  <\/p>\n<p>De flesta av dessa saker finns i ett Arduino startpaket.  Om du inte har ett startkit kolla in v\u00e5r guide f\u00f6r att v\u00e4lja det b\u00e4sta f\u00f6r dig.<\/p>\n<p>Du kan g\u00f6ra din kontroller s\u00e5 komplicerad som du vill, men f\u00f6r det h\u00e4r exemplet kommer vi att st\u00e4lla in en potentiometer och en knapp \u2013 perfekt f\u00f6r att styra ett enkelt arkadspel.<\/p>\n<figure>\n<\/figure>\n<h2 id=\"assembling-your-controller\"><span class=\"ez-toc-section\" id=\"Montering_av_din_styrenhet\"><\/span>  Montering av din styrenhet<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>St\u00e4ll in din breadboard och Arduino som visas i bilden nedan.  Det h\u00e4r \u00e4r vad vi kommer att anv\u00e4nda som v\u00e5r spelkontroll, \u00e4ven om du kan anv\u00e4nda n\u00e4stan exakt samma inst\u00e4llning som en g\u00f6r-det-sj\u00e4lv midi-kontroller ocks\u00e5!<\/p>\n<figure>\n<\/figure>\n<h2 id=\"preparing-your-arduino\"><span class=\"ez-toc-section\" id=\"Forbereder_din_Arduino\"><\/span>  F\u00f6rbereder din Arduino<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>N\u00e4r du har anslutit allt, anslut din Arduino via USB.  I Arduino Software IDE g\u00e5 till <strong>Verktyg &gt; Styrelse<\/strong> och <strong>Verktyg &gt; Port<\/strong> f\u00f6r att v\u00e4lja vilken mikrokontroller och port du anv\u00e4nder.  Arduino IDE levereras med skissen vi beh\u00f6ver, och du kan hitta den under <strong>Arkiv &gt; Exempel &gt; Firmata &gt; StandardFirmata<\/strong>.  Klicka p\u00e5 Ladda upp s\u00e5 \u00e4r du redo att b\u00f6rja.<\/p>\n<p>Om du \u00e4r ny p\u00e5 Arduino och ditt huvud sm\u00e4lter n\u00e5got, kolla in v\u00e5r nyb\u00f6rjarguide f\u00f6r att hj\u00e4lpa dig att f\u00e5 det att prata bra med din dator.<\/p>\n<h2 id=\"setting-up-your-unity-project\"><span class=\"ez-toc-section\" id=\"Konfigurera_ditt_Unity-projekt\"><\/span>  Konfigurera ditt Unity-projekt<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>I Unity, \u00f6ppna <strong>F\u00f6nster &gt; Asset Store<\/strong> f\u00f6r att komma \u00e5t Unitys Asset Store fr\u00e5n Unity Editor.  S\u00f6k i Asset Store efter Uniduino-plugin.  Detta plugin l\u00e5ter dig ta emot och skicka data till och fr\u00e5n dina Arduino-stift inuti Unity.  Pluginen kostar i skrivande stund $30.  Det \u00e4r m\u00f6jligt att g\u00f6ra det h\u00e4r projektet utan att k\u00f6pa plugin, \u00e4ven om det \u00e4r ganska komplicerat och du kan tycka att pluginet \u00e4r mer praktiskt \u00f6verallt.<\/p>\n<figure>\n<\/figure>\n<p>Den h\u00e4r videon fr\u00e5n skaparna av pluginet tar dig genom processen att testa att allt fungerar, tillsammans med f\u00f6rstag\u00e5ngsinstallationen.  Observera att du kanske ocks\u00e5 m\u00e5ste \u00e5terst\u00e4lla Unity-redigeraren p\u00e5 Windows.<\/p>\n<p>Vi kan anv\u00e4nda samma testpanel f\u00f6r att testa v\u00e5r kontroller.  St\u00e4ll in stift D2 p\u00e5 INPUT och Digital.  L\u00e4ngre ner, st\u00e4ll in stift A5 p\u00e5 ANALOG.  Din potentiometer och knapp b\u00f6r nu visa v\u00e4rden p\u00e5 sk\u00e4rmen bredvid deras pin-nummer.  Framsteg!<\/p>\n<figure>\n<\/figure>\n<h2 id=\"now-to-make-something-we-can-control\"><span class=\"ez-toc-section\" id=\"Nu_ska_vi_gora_nagot_vi_kan_kontrollera\"><\/span>  Nu ska vi g\u00f6ra n\u00e5got vi kan kontrollera<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>S\u00e5 vi har en kontrollant, men vad ska vi kontrollera?  N\u00e5v\u00e4l, m\u00f6jligheterna \u00e4r o\u00e4ndliga, men f\u00f6r idag ska vi skapa ett v\u00e4ldigt enkelt dodging-spel f\u00f6r att testa v\u00e5rt nya kontrollsystem.  Vi kommer att g\u00e5 \u00f6ver speluppl\u00e4gget ganska snabbt, s\u00e5 om du \u00e4r helt ny p\u00e5 Unity-motorn kan du hitta v\u00e5r Unity-spelprogrammeringsguide f\u00f6r nyb\u00f6rjare f\u00f6r att f\u00e5 koll.<\/p>\n<p>Vi kommer att bygga ett mycket grundl\u00e4ggande spel d\u00e4r ditt m\u00e5l \u00e4r att undvika din sf\u00e4r till v\u00e4nster och h\u00f6ger f\u00f6r att undvika fallande kuber, vilket kommer att anv\u00e4nda din nytillverkade anpassade kontroller.<\/p>\n<p>Skapa en ny scen och dra Uniduino prefab fr\u00e5n <strong>Tillg\u00e5ngar &gt; Uniduino &gt; Prefabs<\/strong> in i din hierarki och dra Uniduino prefab till hierarkin.  Vi beh\u00f6ver den d\u00e4r f\u00f6r att prata mellan v\u00e5rt spel och v\u00e5r handkontroll.<\/p>\n<p>Klicka i Unity-hierarkin <strong>Skapa &gt; Sf\u00e4r<\/strong> och anv\u00e4nd fliken Transform i Inspector f\u00f6r att flytta den till botten av spelsk\u00e4rmen.<\/p>\n<figure>\n<\/figure>\n<h2 id=\"it-s-time-to-get-coding\"><span class=\"ez-toc-section\" id=\"Det_ar_dags_att_skaffa_kodning\"><\/span>  Det \u00e4r dags att skaffa kodning<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Nu f\u00f6r att l\u00e4gga till lite kod till denna fest.  Med sf\u00e4ren vald i hierarkin klickar du <strong>L\u00e4gg till komponent &gt; Nytt skript<\/strong> l\u00e4ngst ner i inspekt\u00f6rsf\u00f6nstret.  Namnge det <strong>sphereMover<\/strong> och v\u00e4lj <strong>Ciss<\/strong> fr\u00e5n rullgardinsmenyn.  Klick <strong>Skapa och l\u00e4gg till<\/strong> och skriptet kommer att l\u00e4ggas till i GameObject.  Dubbelklicka p\u00e5 det f\u00f6r att \u00f6ppna skriptet och ange denna kod:<\/p>\n<pre>using UnityEngine;<br\/>using System.Collections;<br\/>using Uniduino;<br\/>public class sphereMover : MonoBehaviour<br\/>{<br\/>\/\/Headers aren't scrictly neccesary, but they make life easier back in the Inspector.<br\/>[Header(\"Arduino Variables\")]<br\/>\/\/we need to declare the Arduino as a variable<br\/>public Arduino arduino;<br\/>\/\/we need to declare an integer for the pin number of our potentiometer,<br\/>\/\/making these variables public means we can change them in the editor later<br\/>\/\/if we change the layout of our arduino<br\/>public int potPinNumber;<br\/>\/\/a float variable to hold the potentiometer value (0 - 1023)<br\/>public float potValue;<br\/>\/\/we will later remap that potValue to the y position of our capsule and hold it in this variable<br\/>public float mappedPot;<br\/>\/\/public int for our button pin<br\/>public int buttonPinNumber;<br\/>[Header(\"Sphere Variables\")]<br\/>\/\/variables to hold the values we noted earlier for the sides of our screen<br\/>public float leftEdge;<br\/>public float rightEdge;<br\/>\/\/ Use this for initialization<br\/>void Start ()<br\/>{\/\/and initialize we shall, starting with the Arduino Variable. <br\/>\/\/we are only using one arduino, so we can use Arduino.global to grab it.<br\/>arduino = Arduino.global;<br\/>arduino.Setup(ConfigurePins);<br\/>}<br\/>void ConfigurePins()<br\/>{<br\/>\/\/configure the Arduino pin to be analog for our potentiometer<br\/>arduino.pinMode(potPinNumber, PinMode.ANALOG);<br\/>\/\/Tell the Arduino to report any changes in the value of our potentiometer<br\/>arduino.reportAnalog(5, 1);<br\/>\/\/configure our Button pin<br\/>arduino.pinMode(buttonPinNumber, PinMode.INPUT);<br\/>arduino.reportDigital((byte)(buttonPinNumber \/ 8), 1);<br\/>}<br\/>}<\/pre>\n<p>Ta en stund att l\u00e4sa igenom kodkommentarerna.  Hittills har vi deklarerat n\u00e5gra variabler f\u00f6r v\u00e5r Arduino, dess stift och v\u00e5r Sphere.  Vi har ocks\u00e5 anv\u00e4nt<\/p>\n<p>Start- och ConfigurePins-metoder f\u00f6r att initiera v\u00e5r Arduino p\u00e5 k\u00f6rtid.  L\u00e5t oss spara v\u00e5rt manus och g\u00e5 tillbaka till Unity-redigeraren och se vad som har \u00e4ndrats.<\/p>\n<figure>\n<\/figure>\n<p>Vi kan nu se v\u00e5ra publika variabler i inspekt\u00f6rsf\u00f6nstret.  L\u00e5t oss se vad vi kan ange i detta skede f\u00f6r att hj\u00e4lpa oss senare.  Vi vet vilka pins vi anv\u00e4nder p\u00e5 Arduino fr\u00e5n v\u00e5r konstruktion tidigare, vi kan ange dem.  Vi vet ocks\u00e5 fr\u00e5n v\u00e5rt experiment tidigare hur l\u00e5ngt vi vill att v\u00e5r sf\u00e4r ska kunna f\u00e4rdas \u00e5t v\u00e4nster och h\u00f6ger s\u00e5 att den inte ramlar av sk\u00e4rmen.  L\u00e5t oss ange dessa v\u00e4rden nu.<\/p>\n<figure>\n<\/figure>\n<h2 id=\"first-signs-of-life\"><span class=\"ez-toc-section\" id=\"De_forsta_tecknen_pa_liv\"><\/span>  De f\u00f6rsta tecknen p\u00e5 liv<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Det \u00e4r dags att faktiskt se v\u00e4rden fr\u00e5n v\u00e5r Arduino inuti Unity Editor.  F\u00f6r n\u00e4rvarande kan vi l\u00e4gga till en rad kod till v\u00e5rt sphereMover-skripts uppdateringsfunktion och spara skriptet igen.<\/p>\n<pre>void Update ()<br\/>{<br\/>\/\/We assign the value the arduino is reading from our potentionmeter to our potValue variable<br\/>potValue = arduino.analogRead(potPinNumber);<br\/>} <\/pre>\n<p>Nu n\u00e4r vi har v\u00e5r potValue-variabel uppdaterad varje bildruta, kan vi se dess v\u00e4rde i realtid i Unity Inspector.  Innan vi testar det vore det ett bra tillf\u00e4lle att kontrollera att Uniduino-kontakten lyssnar p\u00e5 r\u00e4tt port.  Klicka p\u00e5 Uniduino i Heirarchy och kontrollera dess portnamn i Inspector.  Om det \u00e4r tomt, fyll i r\u00e4tt portnummer f\u00f6r din Arduino.  I det h\u00e4r fallet var det COM4, \u200b\u200b\u00e4ven om det kan vara annorlunda f\u00f6r dig.  Kontrollera att du anv\u00e4nder Arduino IDE om du \u00e4r os\u00e4ker.<\/p>\n<figure>\n<\/figure>\n<p>V\u00e4lj din sf\u00e4r i hierarkin och klicka p\u00e5 knappen Spela h\u00f6gst upp p\u00e5 sk\u00e4rmen.  Systemet beh\u00f6ver n\u00e5gra sekunder f\u00f6r att initiera, varefter du b\u00f6r b\u00f6rja se Pot Value-variabeln \u00e4ndras i inspekt\u00f6ren n\u00e4r du flyttar potentiometern.<\/p>\n<figure>\n<\/figure>\n<p>Nu snackar vi!  N\u00e5v\u00e4l, str\u00e4ngt taget talar Unity och Arduino, men vem r\u00e4knas?  Om du har kommit s\u00e5 l\u00e5ngt och inte ser v\u00e4rdef\u00f6r\u00e4ndringen i inspekt\u00f6ren, kontrollera installationsstegen och se till att du har valt r\u00e4tt port f\u00f6r din Arduino.<\/p>\n<h2 id=\"let-s-move-this-sphere\"><span class=\"ez-toc-section\" id=\"Lat_oss_flytta_denna_sfar\"><\/span>  L\u00e5t oss flytta denna sf\u00e4r<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Nu n\u00e4r vi har en potValue-variabel som uppdateras, vill vi anv\u00e4nda detta v\u00e4rde f\u00f6r att flytta v\u00e5r sf\u00e4r.  N\u00e4r potentiometern \u00e4r hela v\u00e4gen till v\u00e4nster vill vi att sf\u00e4ren ska vara p\u00e5 sk\u00e4rmens v\u00e4nstra sida och vice versa.  Objekt i Unity \u00e4r placerade vid en punkt i vektorrymden, som best\u00e4ms av v\u00e4rdena f\u00f6r dess Transform.position.  I bilden nedan, d\u00e4r sf\u00e4ren \u00e4r l\u00e4ngst bort till v\u00e4nster som vi skulle vilja ha den, kan du se att dess positionsvektor \u00e4r 9,5, -4, 0.<\/p>\n<figure>\n<\/figure>\n<p>Vi vill p\u00e5verka sf\u00e4rens X-position.  Tyv\u00e4rr kommer det inte att fungera att anv\u00e4nda v\u00e4rdena fr\u00e5n v\u00e5r potentiometer direkt, eftersom n\u00e4r potentiometern \u00e4r hela v\u00e4gen till v\u00e4nster ger den ett v\u00e4rde p\u00e5 0 \u2014 vilket skulle placera v\u00e5r sf\u00e4r mitt p\u00e5 sk\u00e4rmen.  I den andra ytterligheten skulle potentiometerns h\u00f6gsta v\u00e4rde, 1023, placera kuben l\u00e5ngt borta till h\u00f6ger om v\u00e5r sk\u00e4rm.  Ej anv\u00e4ndbar.  Vad vi beh\u00f6ver h\u00e4r \u00e4r lite matematik.<\/p>\n<h2 id=\"why-do-math-when-unity-will-do-it-for-you\"><span class=\"ez-toc-section\" id=\"Varfor_gora_matematik_nar_Unity_kommer_att_gora_det_at_dig\"><\/span>  Varf\u00f6r g\u00f6ra matematik n\u00e4r Unity kommer att g\u00f6ra det \u00e5t dig?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>F\u00f6r de av er d\u00e4r ute som \u00e4r r\u00e4dda f\u00f6r att stirra p\u00e5 ett papper som \u00e4r t\u00e4ckt av orimliga siffror (\u00e4ven om det finns n\u00e5gra bra webbplatser som kan hj\u00e4lpa dig att l\u00e4ra dig matematik), var inte r\u00e4dd.  Vi beh\u00f6ver ett s\u00e4tt att f\u00e5 v\u00e5ra potentiometerv\u00e4rden att \u00f6verensst\u00e4mma med v\u00e5r sf\u00e4rs X-position.  Lyckligtvis kan vi anv\u00e4nda en <strong>F\u00f6rl\u00e4ngningsmetod<\/strong>.<\/p>\n<p>En f\u00f6rl\u00e4ngningsmetod \u00e4r ett skript som g\u00f6r ett specifikt jobb \u00e5t oss.  I det h\u00e4r fallet ger vi den de v\u00e4rden vi har, och den returnerar dem mappade till varandra, redo att anv\u00e4ndas i v\u00e5r <strong>sphereMover<\/strong> manus.  Klicka p\u00e5 h\u00f6gst upp i projektpanelen <strong>Skapa &gt; C#-skript<\/strong> och d\u00f6p det till ExtensionMethods.  Ange koden nedan i skriptet:<\/p>\n<pre>using UnityEngine;<br\/>using System.Collections;<br\/>public static class ExtensionMethods {<p>\/\/our handy dandy Remapper function<br\/>public static float Remap (this float value, float from1, float to1, float from2, float to2) <br\/>{<br\/>return (value - from1) \/ (to1 - from1) * (to2 - from2) + from2;<br\/>}<br\/>}<\/p><\/pre>\n<p>Spara skriptet och g\u00e5 tillbaka till ditt sphereMover-skript.  Vi kan nu anv\u00e4nda den h\u00e4r Remap-funktionen i v\u00e5rt ExtensionMethods-skript i v\u00e5r uppdateringsfunktion f\u00f6r att konvertera v\u00e5ra potentiometerv\u00e4rden till anv\u00e4ndbara v\u00e4rden i v\u00e5rt spel.  Under d\u00e4r vi just tilldelade variabeln potValue, skriv f\u00f6ljande:<\/p>\n<figure>\n<\/figure>\n<p>Prompten visar oss att v\u00e5r Remap tar tv\u00e5 upps\u00e4ttningar av Fr\u00e5n- och Till-v\u00e4rden och mappar dem tillsammans.  Vi kan l\u00e4gga in v\u00e5ra v\u00e4rderingar i detta.<\/p>\n<pre>mappedPot = potValue.Remap(0, 1023, leftEdge, rightEdge);<\/pre>\n<p>Spara ditt manus, g\u00e5 tillbaka till Unity-redigeraren och tryck p\u00e5 play-knappen.  Du b\u00f6r nu se att den Mappade Pot-variabeln \u00e4ndras n\u00e4r du flyttar potentiometern f\u00f6r att motsvara de v\u00e4rden vi best\u00e4mt f\u00f6r v\u00e5ra V\u00e4nster- och H\u00f6gerkanter.  Luta dig tillbaka och tacka ditt ExtensionMethods-skript.  Inte en minir\u00e4knare i sikte.<\/p>\n<figure>\n<\/figure>\n<p>Notera: om du m\u00e4rker att dina v\u00e4rden \u00e4r omv\u00e4nda, s\u00e5 n\u00e4r din potentiometer \u00e4r hela v\u00e4gen till h\u00f6ger f\u00e5r du ett negativt v\u00e4rde f\u00f6r din Mappad Pot-variabel, kan du ha din potentiometer inst\u00e4lld p\u00e5 fel s\u00e4tt.  Lyckligtvis kan du fixa detta utan att g\u00f6ra n\u00e5gon omkoppling.  Du kan helt enkelt byta v\u00e4rden n\u00e4r du mappar om dem:<\/p>\n<figure>\n<\/figure>\n<p>Nu har vi \u00e4ntligen anv\u00e4ndbara v\u00e4rden.  Nu \u00e4r allt som \u00e5terst\u00e5r att g\u00f6ra att tilldela dessa v\u00e4rden till v\u00e5r sf\u00e4rs X-position:<\/p>\n<pre>\/\/Assign the mapped pot value to the sphere's x position<br\/>transform.position = new Vector3(mappedPot, transform.position.y, transform.position.z);<\/pre>\n<p>Spara ditt manus, g\u00e5 tillbaka till Unity-redigeraren och tryck p\u00e5 play.  Du b\u00f6r nu kunna flytta din Sphere till v\u00e4nster och h\u00f6ger med hj\u00e4lp av din potentiometer!<\/p>\n<h2 id=\"putting-the-button-to-work\"><span class=\"ez-toc-section\" id=\"Att_satta_knappen_i_arbete\"><\/span>  Att s\u00e4tta knappen i arbete<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Nu n\u00e4r vi har v\u00e5r sf\u00e4r i r\u00f6relse, skulle det inte vara sk\u00f6nt att ha ett s\u00e4tt att sakta ner saker och ting lite n\u00e4r vi hamnar i en tr\u00e5ng plats?  Vi kommer att anv\u00e4nda v\u00e5r knapp f\u00f6r att sakta ner tiden i v\u00e5rt spel.  \u00d6ppna ditt sphereMover-skript och l\u00e4gg till den h\u00e4r koden i din uppdateringsfunktion<\/p>\n<pre>\/\/if Unity detects the button is being pressed, the time scale slows down<br\/>if (arduino.digitalRead(buttonPinNumber) == 1){<br\/>Time.timeScale = 0.4f;<br\/>}<br\/>else Time.timeScale = 1.0f;<\/pre>\n<p>Nu har vi mekaniken i v\u00e5rt spel, l\u00e5t oss l\u00e4gga till n\u00e5gra hinder!  Vi kommer att anv\u00e4nda sf\u00e4rens naturliga fiende, kuben.  Klicka i hierarkin <strong>Skapa &gt; 3d-objekt &gt; Kub<\/strong>.  I kubens inspekt\u00f6r, <strong>L\u00e4gg till komponent &gt; Fysik &gt; Rigidbody<\/strong>.  St\u00e4ll in Drag-v\u00e4rdet f\u00f6r rigidbody till 5. Under Box Collider-komponenten i inspekt\u00f6ren v\u00e4ljer du ocks\u00e5 Is Trigger.  Detta g\u00f6r att vi kan uppt\u00e4cka kollisioner med v\u00e5r sf\u00e4r.<\/p>\n<p>Skapa ett skript p\u00e5 kuben och kalla det <strong>collideWithSphere<\/strong>, \u00f6ppna skriptet och ta bort start- och uppdateringsfunktionerna eftersom vi inte kommer att beh\u00f6va dem den h\u00e4r g\u00e5ngen.  Ange denna kod:<\/p>\n<pre>using UnityEngine;<br\/>using System.Collections;<br\/>public class collideWithSphere : MonoBehaviour<br\/>{<br\/>void OnTriggerEnter(Collider other)<br\/>{<br\/>Destroy(other.gameObject);<br\/>}<br\/>}<\/pre>\n<p>OnTriggerEnter skickar ett meddelande n\u00e4r triggerkollideraren tr\u00e4ffar en annan kolliderare.  I det h\u00e4r fallet s\u00e4ger vi \u00e5t den att f\u00f6rst\u00f6ra vad den \u00e4n r\u00f6r.  Spara skriptet och g\u00e5 tillbaka till Unity-redigeraren.  Dra kuben fr\u00e5n hierarkin till projektpanelen.  Du kommer att m\u00e4rka att texten i kuben i hierarkin har blivit bl\u00e5.  Det beror p\u00e5 att vi har skapat en prefab och sparat den i v\u00e5rt projekt.  Ta bort din kub fr\u00e5n hierarkin nu.<\/p>\n<p>Allt vi beh\u00f6ver nu \u00e4r ett skript f\u00f6r att skapa kuberna.  Klicka i hierarkin <strong>Skapa &gt; Skapa tom<\/strong>, och byt namn p\u00e5 den till Game Manager i Inspector och l\u00e4gg till ett skript som heter gameManager.  \u00d6ppna skriptet och l\u00e4gg till denna kod:<\/p>\n<pre>using UnityEngine;<br\/>using System.Collections;<br\/>public class gameManager : MonoBehaviour {<br\/>\/\/a variable to hold the prefab we want to spawn<br\/>public GameObject cube;<br\/>\/\/we want some variables to decide how any cubes to spawn <br\/>\/\/and how high above us we want them to spawn<br\/>public int numberToSpwan;<br\/>public float lowestSpawnheight;<br\/>public float highestSpawnheight;<br\/>\/\/ Use this for initialization<br\/>void Start ()<br\/>{<br\/>for (int i = 0; i &lt; numberToSpwan; i++)<br\/>{<br\/>Instantiate(cube, new Vector3(Random.Range(-9, 9), Random.Range(lowestSpawnheight, highestSpawnheight), 0), Quaternion.identity);<br\/>}<br\/>}<p>\/\/ Update is called once per frame<br\/>void Update ()<br\/>{<\/p><p>}<br\/>}<\/p><\/pre>\n<p>Spara skriptet.  Tillbaka i redigeraren, v\u00e4lj Game Manager i hierarkin och dra din kubprefab fr\u00e5n projektpanelen till Cube-variabeln i Inspector.  Fyll i v\u00e4rdena f\u00f6r din lek h\u00e4r ocks\u00e5.  Du kan pilla med den f\u00f6r att g\u00f6ra den s\u00e5 sv\u00e5r eller l\u00e4tt som du vill.  Observera att det \u00e4r v\u00e4rt att l\u00e5ta dina l\u00e4gsta kuber skapas tillr\u00e4ckligt h\u00f6gt f\u00f6r att till\u00e5ta Uniduino att initiera \u2014 att f\u00f6rlora spelet innan du kan flytta kan vara frustrerande!<\/p>\n<figure>\n<\/figure>\n<h2 id=\"the-finished-project\"><span class=\"ez-toc-section\" id=\"Det_fardiga_projektet\"><\/span>  Det f\u00e4rdiga projektet<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Nu n\u00e4r du trycker p\u00e5 play kommer kuberna att spawna ovanf\u00f6r dig och falla.  Du kan anv\u00e4nda din potentiometer f\u00f6r att undvika dem, och din knapp f\u00f6r att sakta ner tiden.<\/p>\n<p>I det h\u00e4r projektet har vi skapat en anpassad kontroller med en Arduino, konfigurerat Unity och Uniduino f\u00f6r att kommunicera med den, och skapat ett enkelt spel f\u00f6r att testa det.  Koncepten h\u00e4r kan appliceras p\u00e5 n\u00e4stan alla projekt, och det finns till och med game jams som \u00e4r specialiserade p\u00e5 anpassade kontroller.<\/p>\n<p>Med Arduino och Unity kan du skapa en anpassad kontroller fr\u00e5n n\u00e4stan vad som helst.  Har du skapat en hi-fi som styr en rymdfarkost?  En br\u00f6drost som styr ett plattformsspel?<\/p>\n<p><strong>Om du har gjort ett s\u00e5dant h\u00e4r projekt skulle jag g\u00e4rna se det!  L\u00e4gg upp det i kommentarerna nedan!<\/strong><\/p>\n<p>    <strong class=\"section-sub-title\">Om f\u00f6rfattaren<\/strong><\/p>\n<p>            <strong class=\"bio-title\">Ian Buckley (220 artiklar publicerade)<br \/><\/strong><\/p>\n<p>Ian Buckley \u00e4r en frilansjournalist, musiker, artist och videoproducent bosatt i Berlin, Tyskland.  N\u00e4r han inte skriver eller st\u00e5r p\u00e5 scen, pysslar han med DIY-elektronik eller kod i hopp om att bli en galen vetenskapsman.<\/p>\n<p>                            Mer fr\u00e5n Ian Buckley<\/p>\n<h4><span class=\"ez-toc-section\" id=\"Prenumerera_pa_vart_nyhetsbrev\"><\/span>Prenumerera p\u00e5 v\u00e5rt nyhetsbrev<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>G\u00e5 med i v\u00e5rt nyhetsbrev f\u00f6r tekniska tips, recensioner, free e-b\u00f6cker och exklusiva erbjudanden!<\/p>\n<p>Klicka h\u00e4r f\u00f6r att prenumerera<\/p>\n<\/p><\/div>\n  <div id=\"ez-toc-container\" class=\"ez-toc-v2_0_88 ez-toc-wrap-center counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 eztoc-toggle-hide-by-default' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blogging-techies.com\/sw\/hur-man-gor-en-anpassad-spelkontroll-med-arduino-och-unity\/#For_detta_projekt_behover_du\" >F\u00f6r detta projekt beh\u00f6ver du<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blogging-techies.com\/sw\/hur-man-gor-en-anpassad-spelkontroll-med-arduino-och-unity\/#Montering_av_din_styrenhet\" >Montering av din styrenhet<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/blogging-techies.com\/sw\/hur-man-gor-en-anpassad-spelkontroll-med-arduino-och-unity\/#Forbereder_din_Arduino\" >F\u00f6rbereder din Arduino<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/blogging-techies.com\/sw\/hur-man-gor-en-anpassad-spelkontroll-med-arduino-och-unity\/#Konfigurera_ditt_Unity-projekt\" >Konfigurera ditt Unity-projekt<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/blogging-techies.com\/sw\/hur-man-gor-en-anpassad-spelkontroll-med-arduino-och-unity\/#Nu_ska_vi_gora_nagot_vi_kan_kontrollera\" >Nu ska vi g\u00f6ra n\u00e5got vi kan kontrollera<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/blogging-techies.com\/sw\/hur-man-gor-en-anpassad-spelkontroll-med-arduino-och-unity\/#Det_ar_dags_att_skaffa_kodning\" >Det \u00e4r dags att skaffa kodning<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/blogging-techies.com\/sw\/hur-man-gor-en-anpassad-spelkontroll-med-arduino-och-unity\/#De_forsta_tecknen_pa_liv\" >De f\u00f6rsta tecknen p\u00e5 liv<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/blogging-techies.com\/sw\/hur-man-gor-en-anpassad-spelkontroll-med-arduino-och-unity\/#Lat_oss_flytta_denna_sfar\" >L\u00e5t oss flytta denna sf\u00e4r<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/blogging-techies.com\/sw\/hur-man-gor-en-anpassad-spelkontroll-med-arduino-och-unity\/#Varfor_gora_matematik_nar_Unity_kommer_att_gora_det_at_dig\" >Varf\u00f6r g\u00f6ra matematik n\u00e4r Unity kommer att g\u00f6ra det \u00e5t dig?<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/blogging-techies.com\/sw\/hur-man-gor-en-anpassad-spelkontroll-med-arduino-och-unity\/#Att_satta_knappen_i_arbete\" >Att s\u00e4tta knappen i arbete<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/blogging-techies.com\/sw\/hur-man-gor-en-anpassad-spelkontroll-med-arduino-och-unity\/#Det_fardiga_projektet\" >Det f\u00e4rdiga projektet<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/blogging-techies.com\/sw\/hur-man-gor-en-anpassad-spelkontroll-med-arduino-och-unity\/#Prenumerera_pa_vart_nyhetsbrev\" >Prenumerera p\u00e5 v\u00e5rt nyhetsbrev<\/a><\/li><\/ul><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n ","protected":false},"excerpt":{"rendered":"<p>Har du n\u00e5gonsin velat designa din egen spelkontroll? Det \u00e4r l\u00e4ttare \u00e4n du tror! I det h\u00e4r korta projektet kommer vi att bygga en enkel anpassad spelkontroll att anv\u00e4nda med Unity-spelmotorn. Den h\u00e4r kontrollern kommer att drivas av en Arduino Uno, \u00e4ven om du kan anv\u00e4nda ett av de m\u00e5nga alternativen som finns f\u00f6r detta [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":65628,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/ipotek.net\/wp-content\/uploads\/2022\/01\/Hur-man-gor-en-anpassad-spelkontroll-med-Arduino-och-Unity.jpg","fifu_image_alt":"","footnotes":""},"categories":[5],"tags":[11639,34831,494,27,163,102,26,35966,27684],"class_list":["post-65627","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bloggar","tag-anpassad","tag-arduino","tag-gor","tag-hur","tag-man","tag-med","tag-och","tag-spelkontroll","tag-unity"],"_links":{"self":[{"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/posts\/65627","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/comments?post=65627"}],"version-history":[{"count":0,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/posts\/65627\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/media\/65628"}],"wp:attachment":[{"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/media?parent=65627"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/categories?post=65627"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogging-techies.com\/sw\/wp-json\/wp\/v2\/tags?post=65627"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}