Create en ballong Racing Game i Unity bruke mikrofonen
43
Del
to
Del
Dette Cyber mandag Envato Tuts + kurs vil bli redusert til bare $ 3. Ikke gå glipp av.
Hva du skal lage
Innledning
I denne opplæringen vil du lære hvordan du oppretter et 2D spill ved hjelp av C # og Unity. Vi kommer til å dra nytte av støtte Unity mikrofon for å forbedre spillingen av spillet. Målet med spillet er enkel, å nå den andre siden av nivået ved å unngå hindringer underveis. Spilleren kan flytte hovedpersonen ved å blåse på enhetens mikrofon, flytte det oppover
Du vil lære følgende aspekter av Unity spillutvikling i denne opplæringen.
importere sprites
mikrofonkontroller
arbeide med fysikk kollisjoner
1. Opprett et nytt Unity Prosjekt
Åpne Unity og velg Nytt prosjekt
fra Fil
menyen for å åpne den nye dialogen prosjektet. Fortell Unity hvor du vil lagre prosjektet og sette
Sett opp standardverdier for:.
Menyen til 2D
2. Bygg Innstillinger
I neste trinn, du presentert med Unity brukergrensesnitt. Sette prosjektet opp for din foretrukne plattform ved å velge Bygg Settings
fra Fil
menyen og velge målet plattformen.
3. Unity User Interface
Før vi kommer i gang, sørg for 2D
knappen i Scene
panel er uthevet. Du kan også endre gjeldende oppløsning i Spill
panel.
Du bør også se Unity sin arbeidsplass paneler, som vi skal bruke i denne opplæringen. Ta deg tid til å utforske Unity brukergrensesnitt, for eksempel Scene
, Spill
, Hierarki
, Prosjekt
, Eiendeler
og Inspector
. Vi skal bruke dem mye i denne opplæringen.
4. Spill Interface
Spillet vårt brukergrensesnitt skal være grei. Den neste skjermbilde gir deg en idé av eiendelene vi skal bruke og hvordan spillets endelige brukergrensesnitt vil ende opp som ser. Du kan finne de ressurser vi skal bruke i kildefilene på GitHub.
5. Programming Language
Du kan bruke en av tre programmeringsspråk når du bruker Unity, C #
, UnityScript
, en variant av Javascript, og Boo
. Hver av disse programmeringsspråk har sine fordeler og ulemper, og det er opp til deg å bestemme hvilken du foretrekker. Min personlige preferanse går til programmeringsspråket C # og det er det språket jeg skal bruke i denne opplæringen.
Hvis du velger å bruke et annet programmeringsspråk, så sørg for å ta en titt på Unity sin Script Reference for eksempler .
6. Eiendeler & Lydeffekter
Før vi begynner koding, må vi legge eiendelene til Unity prosjektet. Du kan gjøre dette én av flere måter:
Velg Import New Asset
fra Eiendeler
menyen
legge til elementene til eiendeler mappe i prosjektet
dra og slippe eiendelene i prosjektvinduet
Etter å ha fullført dette trinnet, bør du se verdiene i prosjektets Eiendeler
mappen i Prosjekt
panel.
Vi vil bruke en rekke lyder for å skape en god audial opplevelse. Lydeffektene er brukt i denne opplæringen ble hentet fra freesound.org.
7. Bakgrunn
Start ved å dra og slippe bakgrunnen inn i Hierarki
panel. Det vises automatisk i Scene
panel.
8. Kamera Størrelse
Fordi Scene
panel er satt til å vise et 2D-visning, vil du legge merke til at du velger Hovedkamera
i Hierarki Anmeldelser viser en forhåndsvisning av hva kameraet kommer til å vise. Du kan også se dette i Spillanmeldelser visning. For å gjøre det hele scenen synlig, sette Størrelse
verdien av Hovedkamera
til 4
i Inspector
panelet som vist nedenfor. < .no>
9. Sprite Sheet
Vi vil bruke en sprite dokument for vår spillets brukergrensesnitt-elementer. Unity har en sprite editor som gjør bruk sprites en lek. Kunstverket som brukes i denne opplæringen ble hentet fra openclipart.org.
Importer kunstverk, velger du den fra Eiendeler
panel og endre Sprite Mode
alternativ til < b> Multiple
i Inspector
panel.
Klikk på knappen merket Sprite Editor Hotell og sette Skriv
alternativ til Automatisk
.
10. Cow Rigidbody 2D
Med sprite ark skiver og klar til bruk, kan du klikke på pilen som vises når sprite ark er valgt, og velg sprite av kua, hovedpersonen i spillet vårt. Dra den til åstedet for å legge det til.
For å oppdage kollisjoner, minst ett av de kolliderende objektene må ha en Rigidbody 2D
komponent knyttet til den. For å legge til en til kua, klikker du på Legg til Component
knappen i Inspector
panel. Fra listen over komponenter, velger du RigidBody 2D
i Fysikk 2D
delen.
Sjekk Fast Angle
boksen for å hindre at kua fra roterende hvis det oppstår en kollisjon. Vi vil ikke bruke standard fysikk alvoret i dette spillet, i stedet vil vi simulere vår egen. Endre Gravity Scale
fra 1
til 0
å sikre standard gravitasjon påvirker ikke objektet.
11. Legge colliders
Gulvet blir brukt til å holde våre hovedpersonen fra å falle når vi har lagt fysikk til spillet. Opprett et nytt spill objekt ved å velge Opprett Empty
fra GameObject
menyen.
For å gjøre gulvet oppdage når karakteren berører det, må vi legge til en < b> Box Collider 2D
komponent. En Collider er en fysikk form som definerer området som utløser en kollisjon.
Velg gulvet spillet objektet i Hierarki
, åpne Inspector
panelet, og klikk < b> Legg til Component
. Fra listen over komponenter, velger du Box Collider 2D
i Fysikk 2D
delen
Endre Størrelse
eiendom til X.: 4.8
og Y: 0.05
å lage en liten firkant der kua vil bli plassert. Til slutt legger en Box Collider 2D
til kua spillet objekt ved å gjenta disse trinnene.
12. Cow lydkilde
Audio Source
komponenten brukes til å spille av et lydklipp når spilleren samler stjernen. Denne komponenten vil lese lydklippet sett i sine alternativer og spille den når de kalles fra et skript eller i starten hvis Spill på avkrysnings Awake
er valgt.
Hvis du vil spille av en lyd når spiller samler en stjerne, må vi først legge en Audio Source
komponent til den. Velg stjernen fra Hierarki
eller Scene
visning, klikker du på Legg til Component
knappen i Inspector
panelet, og velg Audio Kilde
i Audio
delen.
Som vi bare vil at lyden skal spille når spilleren berører stjerne, trenger vi da å fjerne Spill på Awake
alternativ. Klikk på den lille prikken på høyre side, under tannhjulikonet, for å velge den lyden vi ønsker å spille.
13. Legge Ballonger
De ballonger representerer liv og helse i vår hovedperson. Når en hånd kolliderer med kua, vil det dukke en av ballongene for å indikere at det ble truffet og hvor mange liv har gått ned.
Dra ballongen sprite fra Eiendeler
til Hierarki
panel og deretter tilbake til Eiendeler
. Dette vil skape en ferdighus
av ballongen. Du vil merke teksten blir blå indikerer det er nå et ferdighus. Ved å opprette et ferdighus, kan vi gjenbruke ballong uten å bruke ekstra ressurser.
Velg den nye ferdighus og trykk på Command + D
å kopiere det. Bruk Rotasjon
verktøy til litt rotere ballongene som vist i skjermbildet over.
Vi gruppe kua og ballonger for å få flytte dem litt enklere. For å gjøre dette, drar en ballong fra Hierarki
panelet og plassere den på toppen av kua spillet objektet i Hierarki
panel. Kua spillet objektet er uthevet for å indikere at slippe ballongen på det vil legge det som et barn av kua spillet objektet. Resultatet er at kua beveger spillet objektet beveges også posisjonen for ballonger.
14. Legge Hindringer
Hendene er fiender eller hindringer som må unngås dersom spilleren ønsker å fullføre nivået ved å samle stjernen. Hendene beveger seg fra side til side, og etterlater en smal åpning i midten for kua å passere gjennom.
Fordi hendene er spillobjektene at vi vil bruke flere ganger, vi først konvertere den til et ferdighus som vi gjorde med ballonger. Følg trinnene over for å skape prefab og bruker editor verktøy for å posisjonere hendene som vist i skjermbildet over.
Vi må også legge til en Collider til hver hånd for å oppdage kollisjoner. For å legge til Collider, klikker du på Legg til Component
knappen i Inspector
panel og velg Box Collider 2D
i Fysikk 2D
delen. Du vil merke at en grønn boks vises rundt hånden når du velger det for å indikere hånden har en Collider knyttet til den.
Vi spiller også en lyd når en hånd kolliderer med kua, spratt en ballong. For å oppnå dette, må vi først legge til lyd. Velg hånd fra Hierarki
eller Scene
visning, klikker du på Legg til Component
knappen i Inspector
panelet, og velg Audio Kilde
fra Audio
delen.
Detaljene i lydkomponent vil dukke opp i Inspector Panel
. Klikk på prikk under tannhjulikonet for å velge den riktige lyden.
15. Legge Star
Målet med spillet er å samle stjernen på slutten av hvert nivå. Spilleren kan flytte kua oppover ved å blåse i enhetens mikrofon.
Dra stjernen fra Eiendeler
panel og legge den til Scene
. I Inspector
's Transform
delen, endre verdiene som vist i skjermbildet nedenfor for å plassere stjernen.
Dette vil plassere stjernen på toppen av nivå. Å oppdage når kua samler stjernen, må vi legge en Collider til det som vi har gjort et par ganger allerede. Legg en Box Collider 2D
til stjernen.
16. Legge Varsler
Varsler er også spillobjektene. De er meldinger informere spilleren når nivået er fullført eller spillet er over.
Dra varsler fra Eiendeler
panelet til Hierarki Hotell og deretter tilbake til Eiendeler
panelet for å konvertere dem til et ferdighus. Senere i denne opplæringen, vil vi legge til en script til de varsler og viser hvordan de brukes. Ikke glem å slette dem fra Scene
når du har konvertert dem til et ferdighus.
17. Legge Scripts
Unity inkluderer en kode editor, en versjon av Mono Utvikle
. Selv om det er en god editor, kan du bruke hva editor du vil. Visual Studio
, for eksempel, er et populært valg hvis du bruker Windows.
Du kan opprette en ny fil ved å lansere din kode editor, lagre filen i Assets
mappe på prosjektet, og deretter legge det til en GameObject
, akkurat som du gjør med en komponent. Alternativt kan du lage et nytt manus i Inspector
ved å velge New Script Hotell og deretter dobbeltklikke på den for å åpne den.
18. Oppdager Mikrofoninngang
For å flytte vår hovedperson, trenger vi tilgang til enhetens mikrofon. Som standard Unity gir grunnleggende støtte for å fange lyd, men det inkluderer ikke en egenskap eller metode for å detektere mikrofonen aktivitetsnivå, som er det vi trenger å flytte kua.
Heldigvis kan vi bruke en tredjepart skript som vil gi oss tilgang til en lydstyrke eiendom. Loudness eiendommen vil tillate oss, sammen med transform.position, å flytte kua.
Opprett en tom GameObject Anmeldelser og gi den navnet MicrophoneInput
. Bruk
Legg Component for å legge ved den nevnte manus og en Audio Source
komponent til det nye spillet objektet.
Ved å gjøre dette, aktiverer vi manuset og programmet vil begynne å spille inn mikrofoninngangen tallet. Ved å justere Følsomhet
eiendom i Inspector
, kontrollerer vi hvor mye kua er beveget av input av mikrofonen. Jo høyere verdi, jo raskere vil kua flytte. Jeg har funnet ut at 50
er en god verdi å begynne med.
19. Flytte Hands
Følgende skript definerer Hånd klasse og styrer bevegelsen av hendene. Det hender stadig flytte fra venstre til høyre og omvendt. La oss se hvordan dette fungerer
Trinn 1:. Egenskaper
Den første egenskapen vi bruker i manuset er moveSpeed, en flåte som definerer antall enheter en hånd beveger seg under hvert bilde. Det setter x verdien av transform.position eiendom, flytte hånden horisontalt.
Den andre eiendommen, currentPos, er også en dupp og lagrer den aktuelle posisjonen til hånden før den beveger seg. Dette vil hjelpe oss beregne antall enheter hånden kan flytte
hjelp UnityEngine, bruker System.Collections; public class Hånd. MonoBehaviour {private float moveSpeed = 0.02f; private float currentPos; offentlig bool venstre = false;
Til slutt, forlot eiendommen av type boolean definerer hvis hånden beveger seg mot venstre. Dette gjør det enkelt å endre retningen på en hånd ved å sette venstre variabelen til enten sant eller usant
Trinn 2:. Begynn Metode
Start-metoden er en metode som er definert i MonoBehaviour klassen som kalles under initialisering, før noen andre metoden kalles-med unntak av Awake, som vi ikke vil dekke i denne opplæringen.
I Start-metoden, vi kan konfigurere objektet før noen annen kode er løpe. I så fall stiller vi currentPos eiendom til hånden nåværende posisjon, før den har flyttet
annullere Start () {currentPos = transform.position.x;}
Trinn 3:. Endre posisjon
I Update metoden, sjekker vi om hånden er til venstre eller høyre, og flytt den i riktig retning under hvert bilde. For å gjøre dette, skriver vi en if setning inne i Update metoden og redusere eller øke x
posisjon ved hjelp av moveSpeed variabel til å endre posisjon eiendom
. Void Update () {/* Flytt Hånd * //* Flytt til høyre hvis hånd er på venstre side * /if {transform.position - = new Vector3 (moveSpeed, 0, 0) (til venstre!); } Else {transform.position + = new Vector3 (moveSpeed, 0, 0); } /* Endre moveSpeed å bevege seg i den andre retningen, og skaper en bevegelse bue * /if (transform.position.x < = currentPos - 0.7f) {moveSpeed * = 1; } If (transform.position.x > = currentPos + 0.7f) {moveSpeed * = 1; }}}
Når hånden beveger seg 0,7 enheter, multipliserer vi den moveSpeed eiendom med -1 for å få hånden beveger seg i motsatt retning. Resultatet er at hendene bevege seg fra den ene siden til den andre i en kontinuerlig loop, noe som gjør det vanskeligere for kua å passere gjennom hendene og nå stjernen.
20. Cow Script
Opprett et nytt manus og fest den til kua spillet objektet. Dette skriptet vil håndtere spillerens handlinger og et par andre funksjoner knyttet til spillets mekanikk, som viser varslene. La oss ta en titt på de egenskaper som brukes i dette skriptet
hjelp UnityEngine, bruker System.Collections; public class Cow. MonoBehaviour {private Vector3 gravitasjon = new Vector3 (0, 0.02f, 0); offentlig GameObject micVolume; private float moveSpeed; private byte ballonger = 3; offentlig GameObject alertWin; offentlig GameObject alertLose;}
tyngdekraften: brukes til å simulere en vertikal kraft, trekker det kua nedover
micVolume: referanse til MicrophoneInput spillet objektet
moveSpeed: får lydstyrken verdi fra MicrophoneInput klassen
ballonger: holder antall ballonger, representerer denne verdien spillerens liv
alertWin: referanse til alertWin spillet objektet
alertLose: referanse til alertLose Spillet objekt
Legg merke til at offentlige variabler trenger å bli satt opp i Unity redaktør. De er alle referanser til prefabs. Innstilling av verdien av en variabel i editoren er enkelt. Lagre skriptet og sørge for at det ikke er noen feil. Deretter bytte tilbake til Unity og velg game objekt
som skriptet er festet. Du skal se variablene som er oppført nedenfor manuset komponent som vist nedenfor.
Dra og slipp den nødvendige eller foretrukket ressurs til variabelen, eller klikk den lille prikken under tannhjulikonet for å velge det.
Pass på at eiendelen og variabelen er av den samme type
eller vil du ikke være i stand til å slippe den, eller se den når du klikker på dot-ikonet.
21. Flytte Cow
Trinn 1: Flytte
For å flytte kua oppover, vil vi bruke den FixedUpdate metoden. Hvorfor ikke den vanlige Update metoden? Denne fremgangsmåte er en forhåndsdefinert MonoBehaviour metode som går hver fast bilderate
stedet for hver ramme. Dette betyr at det vil være jevn, selv om det gjeldende bildefrekvensen er litt lav. Legg til følgende kode blokken til skriptet:
annullere FixedUpdate () {/* Flytt Cow oppover basert på Mic volum * /moveSpeed = micVolume.GetComponent < MicrophoneInput > () lydstyrke * 0.01f;. transform.position = new Vector3 (0, transform.position.y + moveSpeed, 0); /* Simuler vår egen gravitasjon (dette blir ikke sterkere når høy) * /transform.position - = tyngdekraft;}
Vi beregner hastigheten ved å få den aktuelle lydstyrken i mikrofonen. Dette loudness er hentet fra MicrophoneInput klassen og deretter multiplisert med 0,01
. Vi gjør dette for å hindre at kua fra å bevege seg for fort.
Kua karakter flyttes ved å øke y verdien av transform.position eiendom, med hastighets vi lagret i lagret i moveSpeed.
Trinn 2: Simulerer Gravity
I tillegg til å flytte kua, vi også bruke en nedadgående kraft til det, alvoret. Vi oppnår dette ved å redusere posisjonen til kua ved hjelp av gravitasjonsvektor vi laget tidligere. Å gjøre dette vil hele tiden redusere y posisjon til kua uten å gjøre det falle raskere, noe som skjer hvis vi skulle bruke standard gravitasjon oppførsel.
22. Hands Kollisjon
Trinn 1: Oppdager Kollisjoner
I neste trinn, oppdager vi om noen av hendene kolliderer med kua. Den OnTriggerEnter2D metoden går når to objekter kolliderer uten fysikk samhandling. I dette tilfellet, sjekker vi om kua kolliderer med et objekt som heter "Hand" , etter noe som kan være en av hendene på scenen, og spille av lyd knyttet til kua spillet objektet hvis kollisjonen inntreffer. Du vil merke vi også inspisere ku alfa eiendom. . Hvorfor vi gjør dette er forklart i neste trinn
annullere OnTriggerEnter2D (Collider2D andre) {/* Hands Kollisjon * /if (other.name == "Hand" & & transform.GetComponent < SpriteRenderer > (). color.a == 1) {other.audio.Play ();
Trinn 2: Forebygging av flere kollisjoner
Kollisjoner er testet flere ganger hver ramme, noe som betyr at tre kollisjoner vil oppstå i en svært kort tid dukker alle ballongene. Siden vi ikke ønsker at dette skal skje, trenger vi en måte å hindre dette.
En nyttig måte å gjøre dette på er å endre alpha av treffet objektet. Dette vil også gi brukeren visuell tilbakemelding som viser at det har blitt rammet. De neste linjene vil ta seg av det Twitter /* Hindre fra flere kollisjon * /Color alpha = ny farge (1, 1, 1, 0.5f);. Transform.GetComponent < SpriteRenderer >. () Color = alpha; Invoke ("EnableCollision", 1);
Vi først opprette en ny farge objekt og tilordne den fargen på spillet objektet og angi alfaverdien til 0,5 for å gjøre det semi-transparent. Vi deretter tilgang til spillet objektet SpriteRenderer, som lar oss endre sin farge.
Den siste linjen i denne blokken med kode venter et sekund, og deretter kaller en det EnableCollision funksjon. Denne funksjonen tilbakestiller fargeverdiene for kua slik at det er i stand til å detektere en kollisjon på nytt. Vi vil implementere denne funksjonen senere i denne opplæringen.
23. Fjerne Ballonger
Når kua blir truffet av en hånd, må man ballongen for å bli fjernet. Vi kaller det Destroy metode på en ballong spill objekt. Vi bruker søkefunksjonen, fordi vi ikke har en referanse til hver av ballongene.
Denne funksjonen søker i spillets eiendeler og returnerer spillet objektet som vi leter etter, i dette tilfellet en ballong. Twitter /* Fjern Balloon * /Destroy (GameObject.Find ("Balloon")); ballonger -;
Men vent, er ikke der tre ballonger i scenen? Det er riktig. Men returnerer Finn-funksjonen den første kampen den finner. Med andre ord, returnerer den første ballongen spillet objekt den finner.
Vi decrement også ballonger teller for å hjelpe oss å vite når kua har mistet alle sine liv.
24. Game Over
Spillet er over når alle ballongene har poppet. For å teste dette, sjekker vi om ballonger er lik 0 og vise et varsel om sant. Vi har også satt av tyngdekraften er y eiendom til 0 og pause spillet ved å sette tidsskala til 0.
Tidsskalaen eiendoms styrer hvor tiden går i spillet miljøet. Den kan brukes for å gjøre spillet raskere eller langsommere på grunnlag av sin verdi. Standard tidsskalaen er 1,0, og øker sin verdi akselererer bildefrekvens tilhørende funksjoner og redusere den bremser dem ned. Sette den til 0 pauser spillet, og hindre eventuelle nye kollisjoner. Twitter /* Game Over * /if (ballonger == 0) {GameObject alert = instantiate (alertLose, ny Vector3 (0, 0, 0), transform.rotation ) som GameObject; gravity.y = 0; Time.timeScale = 0; }}
25. Nivå Komplett
Når spilleren får til den andre siden av det nivået vi trenger for å fjerne stjernen og vise et varsel som indikerer at nivået er fullført.
hvis setningen sjekker hvis kollisjonen er faktisk med stjernen spillet objektet og spiller lyd knyttet til kua om navnet er riktig. Vi fjerner da stjernen fra scenen før du oppretter varselet. Vi har også satt av tyngdekraften er y eiendom til 0 som vi gjorde i forrige trinn Twitter /* stjerners Kollisjon * /if (other.name == "Star") {audio.Play (.); Ødelegge (other.gameObject); GameObject alert = instantiate (alertWin, ny Vector3 (0, 0, 0), transform.rotation) som GameObject; gravity.y = 0; }}
26. Aktivere Kollisjoner
EnableCollision metoden tilbakestiller alpha verdien av kua spillet gjenstanden etter at den har blitt truffet av en hånd. Å gjøre dette vil gjøre kua spillet objekt til å oppdage en annen hit. Legg merke til at Color objektet har en alfa 1.
void EnableCollision () {Color alpha = ny farge (1, 1, 1, 1); transform.GetComponent < SpriteRenderer >. () color = alpha;}
27. Omstart av spillet
The Last metoden bruker Application klassen å laste dagens nivå. Opprett et nytt manus som heter Restart
, legge til følgende kode blokken til det, og fest den til begge varsel prefabs vi opprettet tidligere
hjelp UnityEngine;. Bruker System.Collections; public class Restart: MonoBehaviour {void Update () {if (Input.GetButton ("Fire1")) {Reload (); }} Void Reload () {Application.LoadLevel (Application.loadedLevel); }}
Vi først test hvis brukeren berøringer på skjermen ved hjelp av Input klassen og kaller Reload metoden hvis sant. Gjennomføringen av fremgangsmåten Last er kort og enkel. Alt vi gjør er å laste dagens nivå, tilbakestilling hvert objekt og variabel til sin opprinnelige tilstand.
28. Testing
Det er på tide å teste spillet. Trykk Kommando-P
å spille spillet i Unity. Hvis alt fungerer som forventet, er du klar for de siste trinnene.
29. Player Settings
Når du er fornøyd med spillet, er det tid for å velge Bygg Settings
fra Fil
menyen og klikk på Player Settings Anmeldelser knapp. Dette bør få opp Player Settings
i Inspector
panel der du kan stille inn parametrene for din søknad.
Disse innstillingene er programspesifikke og inkluderer skaperen eller Selskapet, søknad oppløsning, skjermmodus, etc. Disse innstillingene er avhengig av hvilke enheter du målretter og butikkene eller markeder du skal publisere spillet på.
30. Bygg og Spill
Når prosjektet er riktig konfigurert, er det på tide å revidere Bygg Innstillinger Kjøpe og klikk på bygge
knappen. Det er alt det tar å bygge spillet for testing og /eller distribusjon.
Konklusjon
I denne opplæringen, har vi lært å implementere mikrofonkontroller, fysikk samhandling, sprite ark, og andre aspekter av spillutvikling bruker Unity. Jeg oppfordrer deg til å eksperimentere med resultatet og tilpasse spillet for å gjøre den til din egen. Jeg håper du likte denne opplæringen, og fant den nyttig.