Develop en Monkey Ball inspirert spill med Unity
47
Del
9
Del
Dette Cyber Monday 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 kan lage en mobil 3D-spill ved hjelp av C # og Unity. Målet med spillet er å bruke akselerometer til å flytte ballen og nå portalen
Du vil lære om følgende aspekter av Unity spillutvikling i denne opplæringen.
akselerometer kontroller
kamerabevegelser
fysikk
GUI Tekstur
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 3D
2. Bygg Innstillinger
I neste trinn, du presentert med Unity brukergrensesnitt. Sette prosjektet opp for mobil utvikling ved å velge Bygg Settings
fra Fil
menyen og velge din foretrukne plattformen.
3. Enheter
Det første vi må gjøre etter å ha valgt målet plattformen er å velge størrelsen på grafikken vi skal bruke i spillet. Dette vil hjelpe oss med å velge en passende størrelse for 3D-teksturer og GUI 2D uten å gjøre kunstverket uskarpt eller bruke teksturer som er for store for målenheten. For eksempel trenger kunstverket til å ha en høyere oppløsning hvis du målretter en iPad med en retina-skjerm enn en Lumia 520.
iOS
iPad uten Retina: 1024px x 768px
iPad med Retina: 2048 piksler x 1536px
3,5 "iPhone /iPod Touch uten Retina: 320px x 480px
3,5" iPhone /iPod med Retina: 960 x x 640px
4 "iPhone /iPod Touch: 1136px x 640px
Android
Fordi Android er en åpen plattform, det er et bredt spekter av enheter, skjermoppløsninger, og pikseltetthet . Et par av de mer vanlige de er listet opp nedenfor
Asus Nexus 7 Tablet. 800px x 1280px, 216 ppi
Motorola Droid X: 854px x 480px, 228 ppi
Samsung Galaxy SIII: 720px x 1280px, 306 ppi
Windows Phone & Blackberry
Blackberry Z10: 720px x 1280px, 355 ppi
< li> Nokia Lumia 520: 400px x 800px, 233 ppi
Nokia Lumia 1520: 1080px x 1920px, 367 ppi
Merk at koden vi skal skrive i denne opplæringen kan være brukes til å målrette noen av plattformene.
4. Eksport Graphics
Avhengig av hvilke enheter du målretter, kan det hende du må konvertere grafikken til anbefalt størrelse og pikseltetthet. Du kan gjøre dette i din favoritt bilde editor. Jeg har brukt den Juster størrelse ...
funksjon under Verktøy
menyen i OS X Forhåndsvisning
søknad.
5. Unity User Interface
Du kan endre oppløsningen som blir vist i Spill
panel.
6. Spill Interface
Grensesnittet i spillet vårt vil være grei. Skjermbildet over gir deg en idé av kunstverket vi skal bruke, og hvordan det endelige spillet grensesnittet vil ende opp som ser. Du kan finne illustrasjoner og tilleggsressurser i opplæringen sin kildefilene på GitHub.
7. Programming Language
Du kan bruke en av tre programmeringsspråk når du bruker Unity, C #
, UnityScript
, en variant av Javascript, og Boo
. Hver 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 #, så 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 .
8. Lydeffekter
Jeg skal bruke en rekke lyder å forbedre audial opplevelsen av spillet. Lydeffektene er brukt i denne opplæringen ble hentet fra playonloop.com og Freesound.
9. 3D-modeller
For å lage spillet vårt vi må først få våre 3D-modeller. Jeg anbefaler 3docean for høy kvalitet modeller, teksturer og mer, men hvis du tester eller lære så noen gratis modeller er bra også. Modellene i denne opplæringen ble lastet ned fra SketchUp 3D-galleriet der du kan finne et godt utvalg av modeller av alle slag.
Nå, som Unity ikke gjenkjenner SketchUp filformat trenger vi å konvertere den til noe Unity kan importere. Vi må først laste ned gratis versjon av SketchUp, som kalles SketchUp Make.
Åpne din 3D-modell i SketchUp Lag, velg Export > 3D Model
fra Fil
menyen, og velg Collada (* .dae)
.
Velg et navn og plassering, og klikk på lagre knappen. Dette vil opprette en fil og en mappe for 3D-modellen. Filen inneholder data for 3D-objektet mens mappen inneholder modellens teksturer. Du kan deretter importere modellen i Unity som forklart i neste trinn.
10. Import Eiendeler
Før vi begynner koding, må vi legge våre eiendeler til Unity prosjektet. Du kan gjøre dette én av flere måter:
Velg Import New Asset
fra Eiendeler
menyen
legge til elementene til eiendelene mappe i prosjektet
dra og slippe eiendelene i prosjektvinduet
Etter å ha fullført dette trinnet, bør du se verdiene i prosjektet ditt mappe Eiendeler
i Prosjekt
panel.
11. Opprett Scene
Vi er klar til å lage scene av spillet vårt ved å dra objekter til Hierarki
eller Scene
panel. Vi vil også bruke Unity mors 3D primitive gjenstander for å lage det nivået som vist i de neste trinnene.
12. Kameraoppsett
La oss først posisjon vår Hovedkamera
litt høyere for å oppnå den utsikten vi ønsker. Velg det fra Hierarki
panel og justere Transform
verdier i Inspektør
å matche de som er vist nedenfor.
Ikke bry deg om du ikke ser noen endringer. Vi har ikke skapt noe for kameraet å se ennå. Deretter bruker du Inspektør
å sette Bakgrunn
farge til RGB. 0, 139, 252
13. Bakgrunn
Vår plattform nivået vil bli svever over en bakgrunn, som vil være en representasjon av en sjø. Det vil bli laget med Unity primitiver, en enkel Plane
med en tekstur brukes til det.
Mens Unity kan arbeide med 3D-objekter av enhver type skapt av andre programmer, er det noen ganger enklere og . /eller mer praktisk å bruke primitiver for prototyper
For å opprette sjøen, for eksempel velge Opprett Andre > Plane
fra GameObject
menyen og justere Transform
verdier i Inspektør
å matche de som er vist nedenfor.
Du bør en torg i Scene
panel. Vi vil bruke den til å oppdage når spilleren faller fra plattformen, slutter spillet.
Det er verdt å nevne at disse primitive objekter som allerede har en Mesh Collider
knyttet til dem, noe som betyr at de vil automatisk oppdage kollisjoner eller utløse hendelser når de kommer i kontakt med en RigidBody
.
14. Tekstur Material
Hvis du vil bruke en tekstur til sjøfly, må vi opprette en Material
. En Material
brukes til å definere hvordan en GameObject
ser og det er viktig å legge en tekstur til en GameObject
.
Velg Lag > Materialet
fra Eiendeler
menyen for å opprette en, finne den i Eiendeler
panel, og bruke Inspektør
å velge tekstur du ønsker å bruke som din sjøen. Dette er innstillingene jeg har brukt:
Du vil merke en melding i materialet delen som sier at det er anbefalt å bruke Mobile /Diffuse
som en shader, fordi standard hvit farge doesn 't gjøre noe. Endre den til Mobile /
Diffuse
vil også hjelpe til med ytelsen.
15. Legge Lys
Du har kanskje lagt merke til at havet er litt mørkere enn den burde være. For å fikse dette, må vi legge til en Lys
til vår scene. Velg Opprett Andre
fra GameObject
meny og velg Retnings Lys
. Dette vil skape et objekt som frembringer en stråle av lys. Endre Transform
verdier som vist i følgende skjermbilde for å gjøre det belyse havet.
Dette ser mye bedre.
16. Opprette plattformer
Plattformene er deler av vårt nivå og brukes av spilleren til å flytte ballen til portalen på den andre siden av havet.
Lag en Plane
som du gjorde for havet og juster Transform
verdier i Inspector
som vist nedenfor. Dette vil skape og sette den første plattformen på plass.
Vi kan nå bruke Unity Flytt Hotell og Rotasjon
verktøy for å lage de andre plattformene. De er alle av samme størrelse, slik at vi kan bruke dem vertikalt eller horisontalt ved å duplisere dem ved hjelp av Command + D
på OS X og Ctrl + D
på Windows.
17. Plattform Texture
Opprett en ny Material
som vi gjorde i Trinn 14 Hotell og bruke tekstur til det. Mine ser slik ut:
Juster x Hotell og y
flislegging til du er fornøyd med resultatet
18.. Grense Ballonger
Vi trenger å skape en ramme for å hindre at vår spiller faller av for lett. . For å gjøre dette, vil vi bruke en ny type primitive, en Cylinder
Velg Opprett Andre > Cylinder
fra GameObject
menyen og justere Transform
verdier i Inspector
som vist nedenfor.
Dette vil legge til en liten grenseby til kanten av den første plattformen. Opprett en ny Material Hotell og endre farge i Inspector
til RGB.
255, 69, 0
Resultatet skal se slik ut:
Bruk Command + D product: ( Ctrl + D
på Windows)
å duplisere grensen og Scale
verktøy for å endre størrelsen. Plasser duplikater på plattformene 'kantene med Unity verktøy.
19. Portal
Portalen er mållinjen av spillet. Spilleren vil bruke akselerometeret til å få tak i ballen og ta det med til dette punktet mens plukke opp gjenstander og unngå å falle av plattformen. Portalen er en 3D-modell, som vi importerte i Trinn 10
.
Dra og slipp den på Scene
eller Hierarki
panel og endring sin Transform
verdiene til følgende:
Dette vil plassere den på slutten av plattformene
20.. Portal Collider
Fordi importerte 3D-modeller har ikke en Collider som standard, må vi legge en. Siden vi trenger bare å teste om ballen treffer den blå delen av portalen, vil vi legge Collider til det.
Ta en titt på portalen modellen i Hierarki
utsikt og du vil legge merke til en liten trekant til venstre for navnet. Klikk på trekanten for å utvide portalen gruppen, og velg det første elementet. Jeg har lagt til -Collider
suffiks for avklaring.
Klikk
Legg til Component-knappen i Inspector Hotell og velg Fysikk > Mesh Collider
. Dette vil legge et Collider ved hjelp av formen på modellens valgte området.
21. Portal lydkilde
For å gi tilbakemelding til spilleren, vil vi spiller en lydeffekt når ballen berører portalens Collider. Fordi vi vil være utløsende hendelsen ved hjelp av den tidligere opprettede Collider, må vi legge til lydkilden til det samme objektet.
Velg den fra Hierarki
panel, klikker du på Legg Component
knappen i Inspector
panelet, og velg Audio Source
fra Audio
delen.
kryssene Spill på Awake Hotell og klikk den lille prikken på høyre side, under tannhjulikonet, for å velge den lyden du ønsker å spille.
22. Legge Øyene
Øyene er ikke noe mer enn dekorative elementer for å gjøre det nivået mindre tomme. Jeg har brukt en importert 3D-modell og en Cylinder
å gjøre dem. Jeg vil ikke gå i detalj skape øyene siden de er ikke avgjørende for kampen. Med det du har lært så langt, bør du være i stand til å lage dem selv.
23. Legge Bananas
Som i Monkey Ball, vil spilleren være i stand til å samle bananer i løpet av spillet. Start med å dra modellen fra Eiendeler
panelet til Scene
. Ikke bekymre deg om sin plassering helt ennå, fordi vi vil konvertere den til en Prefab
senere siden vi skal gjenbruke det flere ganger.
24. Banana Mesh Collider
Som jeg nevnte tidligere, trenger importerte modeller ikke har en Collider som standard, så vi trenger å feste en til banan. Klikk på Legg til Component
knappen i Inspector Hotell og velg Fysikk > Mesh Collider
. Dette vil legge et Collider ved hjelp av modellens form. Sørg for å sjekke Trigger
boksen, fordi vi ønsker å oppdage kollisjoner, men vi ønsker ikke ballen til å reagere med banan.
24. Legge spilleren
Det er på tide å lage vår spillfigur, som vil være en enkel Sphere
primitive. Velg Opprett Andre > Sphere
fra GameObject
menyen for å skape den primitive og endre Transform
verdier i Inspector
som vist nedenfor.
Dette vil skape sfæren og plasser den i starten av vårt nivå.
For å gjøre sfæren semi-transparent, må vi endre sin Shader
alternativer. Åpne Inspector Hotell og endre shader til Transparent /Diffuse
.
25. Spiller RigidBody
For å oppdage en kollisjon med spilleren, må vi legge ved en RigidBody
til det. For å legge til en, velger du Legg til Component
fra Inspector
panel, etterfulgt av Fysikk
> RigidBody
. Du kan la innstillingene på standardverdiene.
26. GUI Tekstur
For å vise spillets brukergrensesnitt, vil vi bruke Unity sin GUI Textures. Unity dokumentasjon gir en tydelig forklaring på GUI Tekstur:
GUI Teksturer vises som flate bilder i 2D. De er laget spesielt for brukergrensesnitt-elementer, knapper eller dekorasjoner. Deres posisjonering og skalering utføres langs x og y-aksen bare, og de er målt i skjermkoordinater, snarere enn Verden Koordinater.
Som standard bilder som er importert til mappe Eiendeler
konverteres Tekstur
som kan brukes til 3D-objekter. Vi trenger å endre dette til GUI Texture
for bildene vi ønsker å bruke i spillet brukergrensesnitt.
Velg bildene du vil konvertere i Eiendeler
panel og åpne Inspector
, klikk på Texture Type
drop-down menyen og velg GUI
.
Du kan nå dra og slippe bildene til Scene
. Bildene vil alltid vises foran alle objektene på scenen og vil bli behandlet som 2D-elementer.
27. GUI Text
Inne i hvert GUI-elementet, viser vi et tall som angir hvor mange bananer spilleren har samlet inn og tiden spilleren har forlatt
Velg Opprett Andre >.; GUI Tekst
fra GameObject
menyen for å lage et tekstobjekt, plasser den i midten av GUI-elementet, og endre teksten i Hierarki
panelet til 0
. Gjør det samme for tiden på høyre side. Jeg har satt standard tid til 30
sekunder.
Du kan bruke en egendefinert font for teksten ved å legge skriften til mappe Eiendeler Kjøpe og deretter endre Font
eiendom av teksten i Inspector
.
28. Legge Scripts
Det er på tide å skrive noen kode. Med brukergrensesnittet på plass, kan vi begynne å skrive den nødvendige koden for å legge til funksjonalitet til spillet vårt. Dette gjør vi ved hjelp av skript. Skript er knyttet til forskjellige spillobjekter. Følg de neste trinnene for å lære hvordan du legger samhandling til det nivået vi har nettopp opprettet.
29. Flytt Scene
Vi begynner ved å gjøre bruk av enhetens akselerometer
. Flytte spilleren med akselerometer er ganske enkel i Unity. Det er ingenting å stille opp, og det er lett å forstå.
Velg scenen, klikker du på Legg til Component
knappen i Inspector
panelet, og velg New Script
. Navn manuset MoveScene og ikke glem å endre språket til C #. Åpne den nyopprettede filen og legge inn følgende kode
hjelp UnityEngine, bruker System.Collections; public class MoveScene. MonoBehaviour {void Update () {transform.rotation * = Quaternion.Euler (Input.acceleration.y /6 , -Input.acceleration.x /3, 0); }}
Vi bruker oppdaterings metode for å be om data fra akselerometeret i hver ramme bruker Input.acceleration eiendommen, som måler enhetens bevegelse i et tredimensjonalt rom. Dette gir oss muligheten til å få x
, y
, og z
verdier, og bruke dem til å kontrollere spillerens posisjon.
Vi bruker deretter innhentet verdier til transform.rotation eiendom av nivået ved å påberope Quaternion.Euler, som returnerer rotasjonsverdier. Merk at vi dele akselerometer verdier for å unngå at spilleren beveger seg for fort, noe som gjør gameplay vanskelig.
Vi bare endre nivået x Hotell og y
verdier, fordi vi trenger bare å vippe og ikke å flytte nærmere eller lenger fra kameraet.
30. Kamera Følg
Følgende skript er festet til Hovedkamera
. Den beregner avstanden mellom kameraet og spilleren og holder den mens ballen flyttes
hjelp UnityEngine, bruker System.Collections; public class FollowPlayer. MonoBehaviour {public GameObject spiller; private Vector3 playerOffset; //Bruk denne for initialisering void Start () {playerOffset = transform.position - player.transform.position; } //Update kalles en gang per ramme void Update () {transform.LookAt (player.transform); transform.position = player.transform.position + playerOffset; }}
Skriptet bruker to variabler som er verdt å forklare:
spiller: Dette er en referanse til den spilleren i Scene
. Du kan sette dette i Inspector
playerOffset. Dette er avstanden mellom kameraet og spilleren. Fordi vi opprettholde den samme avstanden mellom kameraet og spiller, følger kameraet spilleren når den beveger seg. Den
Vi retter kameraet til spilleren og sette sin posisjon til spillerens posisjon offset beregnes i Start-metoden. pluss
verdien av playerOffset. Fordi vi gjør dette i Update metoden blir kameraposisjon beregnes og oppdateres i hver ramme. Resultatet er at kameraet følger spilleren. Dette er en enkel og effektiv strategi for å skape et kamera som følger spilleren.
31. Plukke Bananas
Følgende skript er festet til banan og håndterer eventuelle interaksjoner med det. Vi starter ved å få referanser til tilsvarende lyd og teksten viser antall innsamlede bananer, som vi trenger for å spille av lyden og øke telleren i venstre når spilleren kolliderer med en banan. Når du har erklært variablene i skriptet, må du sette disse referansene i Inspector
hjelp UnityEngine, bruker System.Collections; public class PickBanana. MonoBehaviour {public AudioClip bananaSound; offentlig GUIText bananaText; ugyldig OnTriggerEnter (Collider andre) {AudioSource.PlayClipAtPoint (bananaSound, transform.position); int poengsum = int.Parse (bananaText.text) + 1; bananaText.text = score.ToString (); Ødelegge (gameObject); }}
Neste, kaller vi en metode som påviser når ballen kolliderer med en banan. Når dette skjer, vi spiller lyden og øke telleren.
For å endre disken, skaper vi en variabel med verdien av GUI Tekst Hotell og bruke int.Parse metode for å konvertere strengen til et nummer og øke antallet av 1
. Vi satt verdien til GUI Tekst
, først konvertere tallet til en streng ved å påberope seg toString metode. Endelig påberope vi Destroy å fjerne banan spillet objektet.
32. Falling Off the Platform
Følgende klassen brukes til å oppdage når spilleren faller av plattformen i havet. Fest manuset til sjøen spillet objektet
hjelp UnityEngine, bruker System.Collections; public class Lose. MonoBehaviour {void OnCollisionEnter () {audio.Play (); Påkall ("Last", 1.59f); } Void Reload () {Application.LoadLevel (Application.loadedLevel); }}
Denne enkle klassen bruker OnCollisionEnter metoden for å oppdage når ballen kolliderer med havet, noe som betyr at spilleren har falt av plattformen. Når dette skjer, vi spiller lyden knyttet til sjø og bruke Invoke metode for å ringe Reload metoden, som starter spillet ved omlasting den aktuelle scenen.
Den andre parameteren i Invoke metoden definerer forsinkelse med hvor Reload metoden kalles. Dette er nødvendig som vi først vil at lyden skal fullføre før vi starter et nytt spill.
33. Overvåking Tid
Den neste klassen, Timer, er knyttet til den tiden GUI øverst til høyre. Det reduserer tiden og ender spillet når telleren når 0
bruker UnityEngine, bruker System.Collections; public class Timer:. MonoBehaviour {public GUIText timeText; ugyldig Start () {InvokeRepeating ("ReduceTime", 1, 1); } Void ReduceTime () {int currentTime = int.Parse (timeText.text) - 1; timeText.text = currentTime.ToString (); if (currentTime == 0) {audio.Play (); Påkall ("Last", 1.59f); //venter til lyden spilles for å laste Destroy (timeText); }} Void Reload () {Application.LoadLevel (Application.loadedLevel); }}
Vi holder en referanse til teksten i timeText variabel for å gjøre å endre brukergrensesnittet enkelt. I Start-metoden, kaller vi den InvokeRepeating metoden, som gjentatte ganger påkaller ReduceTime metoden gjentatte ganger.
For å oppdatere teksten i brukergrensesnittet, skaper vi en variabel for å konvertere teksten til et tall, akkurat som vi gjorde tidligere, og trekke fra ett sekund og oppdatere brukergrensesnittet med resultatet.
Når telleren når 0
, korrekt lyd spilles, og vi ødelegger disken teksten. Vi påberope Reload metoden med en forsinkelse for å starte spillet når lyden er ferdig med å spille.
34. Nivå Komplett
Den siste klassen, EndLevel, brukes til å oppdage når den spiller når portalen. Når spilleren passerer gjennom portalen, vi vise en melding på skjermen og ødelegge ødelegge ballen. Vi gjør dette for å hindre ballen fra å falle i sjøen
hjelp UnityEngine, bruker System.Collections; public class EndLevel. MonoBehaviour {public GameObject komplett; offentlig GameObject spiller; void OnTriggerEnter (Collider andre) {audio.Play (); Påkall ("Start", 2); GameObject alert = instantiate (komplett, ny Vector3 (0.5f, 0.5f, 0), transform.rotation) som GameObject; Ødelegge (player.rigidbody); } Void Restart () {Application.LoadLevel (Application.loadedLevel); }}
instantiate metoden brukes til å opprette en forekomst av meldingen som vises til spilleren. Den lar oss bruke GUI-elementet fra prosjektets Eiendeler
stedet for å ha det på scenen. Til slutt, vi starter spillet med en forsinkelse på to sekunder.
35. Testing
Det er på tide å teste spillet. Trykk Kommando + P
å spille spillet i Unity. Hvis alt fungerer som forventet, da er du klar for de siste trinnene.
36. 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 data som inkluderer skaperen eller Selskapet, app oppløsning og visningsmodus, gjengivelsesmodus (CPU, GPU), enhets OS kompatibilitet, etc. Konfigurer innstillingene i henhold til de enhetene du målretter og butikken eller marked hvor du har tenkt å publisere app.
< hr>
37. Ikoner og Splash Images
Ved hjelp av grafikken du opprettet tidligere, kan du nå lage et fint ikon og en splash bilde for spillet ditt. Unity viser deg de nødvendige størrelser, som er avhengig av plattformen du bygger på.
38. Bygg og Spill
Når prosjektet er riktig konfigurert, er det på tide å revidere Bygg Innstillinger Kjøpe og klikk på bygge
Button. Det er alt det tar å bygge spillet for testing og /eller distribusjon.
Konklusjon
I denne opplæringen, har vi lært å bruke akselerometer til å kontrollere bevegelsen av spilleren, GUI teksturer, primitiver, og andre aspekter av spillet utvikling i 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.