Hvordan lage grunnleggende Android-spill med enhet

i denne lignende veiledningen vil vi gå gjennom hvordan du lager en basis Android spill ved hjelp av Unity.



Krav:

  • Enhet
  • En god teksteditor som NotePad ++ (valgfritt men anbefalt)
  • Android SDK
Hvis du ikke allerede har det, bør du begynne med å laste ned og installere Unity SDK og også Android SDK. Vi trenger Android SDK slik at vi kan teste spillets APK i et Android-miljø.

Start Unity og opprett et nytt prosjekt. Gjør det til et 2D-prosjekt.



Det er flere paneler å bli kjent med - Hierarkipanelet som vil inneholde alle sceneelementene våre (scene = uansett hvilket 'nivå' du jobber med for øyeblikket). Deretter er det fanen Spill som brukes til å spille / teste spillet ditt mens du er inne i redigeringsprogrammet, og til høyre har du inspektørpanelet, der du vil redigere forskjellige ting som belysning, fysikk, etc.



Det første vi ønsker å gjøre er å lage en sprite - dette vil være hovedpersonen vår (som vi kontrollerer). Du kan enten tegne din egen sprite, som å bare tegne en firkant med øynene, eller du kan ta en sprite fra internett - bare sørg for at det er en .PNG-fil (gjennomsiktig bakgrunn).



Dra og slipp sprite til hovedscenevinduet (det største vinduet) - det vil også vises i hierarkipanelet til venstre.

Så nå skal vi lage noen plattformer - dette kan være enkle firkanter, fordi vi enkelt kan endre størrelsen på dem for å lage vegger og andre plattformer.

Så det er bare å lage en ny firkant 'sprite' og dra og slippe den på scenevinduet som du gjorde med sprite-karakteren din.



Nå må vi instruere Unity om å gi fysikk til hovedpersonen vår - klikk på hovedsprite-karakteren din (den skal bli uthevet i blått i scenevinduet), og se etter 'GameObjects' på inspektørpanelet.

Klikk på “Legg til komponent> Fysikk 2D> RigidBody2D”. Dette vil automatisk legge til fysikk i spriten din, som du ellers ville ha vært nødt til å skripte selv i en annen SDK.

Vi ønsker å forhindre at hovedsprite-karakteren spinner rundt utenfor kontrollen - så finn kategorien Begrensninger i inspektørpanelet (med hovedspriten fremdeles uthevet i scenevinduet), og merk av for 'Frys rotasjon Z'.

Hvis du trykker på 'Spill' -knappen, bør din viktigste sprite-karakter falle fra himmelen og bare falle uendelig - vi skal ta oss av det senere, men bare ta oppmerksom på hvordan vi lett kunne bruke fysikk. Fysikken vi brukte er avhengig av formen de blir brukt på - så hvis du for eksempel brukte samme fysikk på en sfære, ville den rulle rundt.

Vi vil også fikse orienteringen vår for å forhindre at karakteren snurrer og løper rundt. Finn ‘begrensninger’ i inspektøren med spilleren valgt og kryss av i boksen for å fryse rotasjon Z. Klikk nå på spill igjen, og du bør finne at spilleren din nå faller fra himmelen til sin uendelige undergang.

For å forhindre at vår viktigste sprite-karakter bare faller uendelig, må vi legge til en kollider. Dette er i utgangspunktet bare den solide omrisset av en form som vi vil legge til sprite-hovedkarakteren. Fremhev ditt viktigste sprite-tegn, klikk “Legg til komponent> Fysikk 2D> BoxCollider2D.

Gjør nå det samme nøyaktig med plattformen du opprettet tidligere. Din viktigste sprite-karakter skal nå 'kollidere' med plattformen og bli der.

Så nå vil vi sørge for at kameraet vil følge din viktigste sprite-karakter - inne i scenen bør det allerede være et kameraobjekt. Du vil dra dette på toppen av hovedsprite-karakteren.

Dette er spesielt viktig hvis du oppretter en 3D-basert løper , noe som Skråningen der du trenger at kameraet forblir konstant bak det primære spillobjektet (din viktigste sprite-karakter).

Gå nå til hierarkipanelet, og i listen over GameObjects vil du dra kameraet under hovedsprite-karakteren (Player GameObject). Dette vil gjøre hovedsprite-karakteren til ' foreldre ' av kameraet. Så når Player GameObject beveger seg rundt på skjermen, bør kameraet følge med.

Så for denne spillopplæringen skal vi bare lage et grunnleggende endeløst løpertypespill, noe sånt som Kjør 3 , der hovedpersonen din vil løpe over skjermen og unnslippe hindringer (eller 'game over' hvis du treffer et hinder '. Dette kommer til å ta noen få skript, hvorav de fleste vil bli gitt i denne guiden.

Høyreklikk på 'Assets' -mappen og opprett en ny mappe - gi den navnet Skript . Høyreklikk nå på denne nye mappen og trykk 'Create> C # Script' og gi den navnet PlayerControls . Dette skriptet skal definere oppførselen til vår viktigste sprite-karakter.

Når du dobbeltklikker på dette nye skriptet, blir det bør åpne opp i Visual Studio - alternativt (og min personlige preferanse), kan du redigere den i noe sånt som NotePad ++.

Skriptfilen skal allerede ha litt 'kokerplatekode' inne i seg - i utgangspunktet er dette skript som må være alene eller bare tilpasses dine behov, og vil spare oss mye tid. Så vi skal legge til et nytt objekt.

Over linjen ugyldig Start ():

offentlig Stiv kropp2D rb;

Den neste biten av koden vi trenger å legge til vil gå innenfor Start (), og brukes til å finne den stive kroppen - i utgangspunktet instruerer vi Unity om å finne fysikken vi festet til GameObjects (vår viktigste sprite-karakter) og Start () skal kjøres når et nytt objekt eller skript opprettes.

Så neste, finn fysikkobjektet.

rb = GetComponent< Stiv kropp2D > ();

Og du vil legge til denne linjen i oppdateringen ()

rb.velocity = ny Vector2 (3, rb.velocity.y);

Hva Update () gjør oppdateres kontinuerlig, så all kode som legges til der, vil kjøre kontinuerlig (med mindre objektet blir ødelagt). Så det vi har gjort er å instruere skriptet om at vi vil at stivlegemet skal ha en ny vektor som bruker samme hastighet på Y-aksen (rb.velocity.y), men med en hastighet på 3 på den horisontale aksen. I fremtiden kan du også bruke ‘ FixedUpdate () ’ som er lik, men annerledes, for der kan du kontrollere oppdaterings- / oppdateringsmengden på skriptet.

Lagre skriptet og gå tilbake til Unity, og klikk deretter på din viktigste sprite-karakter for å markere det. I inspektørpanelet, gå til Legg til komponent> Skript og legg til skriptet vi nettopp lagret. Nå når du klikker på Play-knappen, bør sprite-karakteren kontinuerlig bevege seg mot plattformkanten.

Opprette spillerinngangskontroller

Så fordi dette er et endeløst løpestilspill med hindringer, må vi legge til kontroller for spilleren, for eksempel en ‘hopp’-knapp.

Åpne skriptet fra før, så skal vi legge til denne tilleggskoden:

 hvis (Input.GetMouseButtonDown (0)) {rb.velocity = ny Vector2 (rb.velocity.x, 5); }

Du kommer til å sette det i Update () -metoden, og hva det i utgangspunktet gjør, er å fortelle Unity at når spilleren klikker museknappen (som vil bli oversatt som et skjermtrykk på Android), vil sprite-hovedpersonen 'hoppe ' i luften. Dette er fordi vi har lagt til en hastighet på Y-aksen med verdien 5 (en høyere verdi vil selvfølgelig bety et høyere hopp).

Hvis du ikke er så kjent med koding, brukte vi en Hvis uttalelse fordi Hvis er i utgangspunktet en 'gjør eller ikke' -instruksjon - det er ordtaket HVIS dette skjer, gjør denne kommandoen . Så hvis spilleren ikke klikker på musen (eller tapper på Android-skjermen), vil skriptet åpenbart ikke kjøres.

Gå videre og klikk på 'Spill av' -knappen og sørg for at den fungerer riktig før du fortsetter.

Deretter skal vi legge til hindringene våre (som kan 'ødelegge' hovedpersonen sprite), en spillresultat og en 'game over' -meny.

Hvis du har testet spillet så langt, er det eneste problemet vi har så langt at å trykke på 'hopp' -knappen vi opprettet vil hoppe karakteren uansett om de er jordet eller ikke - dette er i utgangspunktet Flappy Birds, og ikke en løper som vi vil. Men vi skal fikse det.

I skriptet legger du til denne koden ovenfor Update () -metoden:

 offentlig Transform groundCheck; offentlig Transformer startposisjon; offentlig   flyte bakkenCheckRadius; offentlig LayerMask whatIsGround; privat   bool på bakken; Og legg deretter til denne neste linjen i Oppdateringsmetoden over hvis uttalelse: onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); Og neste gang vil du endre denne linjen slik at den inkluderer '&& onGround' hvis (Input.GetMouseButtonDown (0) && onGround) {Så hele skriptet vårt skal i utgangspunktet se slik ut: offentlig   klasse   PlayerControls : Enkel oppførsel { offentlig Stiv kropp2D rb; offentlig Transform groundCheck; offentlig Transformer startposisjon; offentlig   flyte bakkenCheckRadius; offentlig LayerMask whatIsGround; privat   bool på bakken; tomrom   Start () {rb = GetComponent (); } tomrom   Oppdater () {rb.velocity = ny Vector2 (3, rb.velocity.y); onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); hvis (Input.GetMouseButtonDown (0) && onGround) {rb.velocity = ny Vector2 (rb.velocity.x, 5); }}}

For å forklare hva vi har gjort, har vi opprettet en ny “transformasjon”, som betyr en posisjon i spillverdenens rom. Vi har satt sin radius, og vi instruerer Unity om å sjekke om radiusen overlapper vårt 'bakken' -lag - og hvis radiusen vår blir synkronisert med 'bakken', bør vår karakter være i stand til å hoppe, og hvis vi vi allerede er i lufta fra et hopp, vi skal ikke kunne hoppe igjen. I utgangspunktet, på bakken vil være sant hvis transformasjonen navngitt groundCheck er overlappende med bakken. Forhåpentligvis gir det mening.

Så lagre skriptet og gå tilbake til Unity, så vil du legge merke til at flere alternativer har blitt lagt til inspektøren etter å ha markert spilleren. Dette er offentlige variabler, og vi kan justere disse etter vår smak.

Høyreklikk nå på hierarkiet og opprett et nytt tomt objekt, og dra det slik at det er under hovedpersonen sprite i hovedvinduet - plasser dette tomme objektet der vi vil at gulvet skal oppdages. Gi nytt navn til objektet til 'Kontroller bakken', og dra det deretter under spillerens spillobjekt som vi gjorde tidligere med kameraet (for å skape et foreldre-barn forhold mellom objektene). Nå vil det tomme objektet følge hovedpersonen sprite, akkurat som kameraet, og den vil kontinuerlig sjekke gulvavstanden. Kamera

Velg nå hovedpersonen sprite og gå til inspektørpanelet - dra Check Ground-objektet inn i rommet som kalles 'groundCheck'. 'Transform' -posisjonen skal være lik posisjonen til dette nye objektet, og der det står 'Radius', gjør den til 0,1.

Vi må definere bakken. Bare velg bakketerrenget og i Inspektøren, finn knappen for 'Lag: Standard' (det er en rullegardinrute) og velg 'Legg til lag'.

Velg “bakken” som laget for plattformen vår, og gjenta dette for alle andre plattformer i spillvinduet. Der det står 'Hva er bakken' på vårt hovedperson sprite-objekt, velg også bakken.

Det vi har gjort er å instruere spillermanuset om å utføre en sjekk - hvis det lille punktet på skjermen overlapper med noe som samsvarer med laget, hopper karakteren bare hvis dette er sant.

Game Over på kollisjon og spillmeny

Så for å pakke det hele, er de siste tingene vi ønsker å gjøre A: Få kollisjon med hindringer til å føre til at spillet er over, og B: Lag et 'game over' -menyskjermbilde med en spill igjen-knapp.

Det du i utgangspunktet vil gjøre er:

  1. Legg til en Spiller innvende og tilordne en stiv kropp og en kollider av ditt valg til det.
  2. Legg til en Fiende innvende og tilordne en stiv kropp og en kollider av ditt valg til det. (og valgfritt, legg til 'Enemy' -kode til det)
  3. Lage en ny C # skript og legg den til som en komponent i Spiller (eller bruk et skript som er festet til spilleren, du trenger ikke å lage et nytt hvis du allerede har et)
  4. Legg til dette i skriptet ditt:
tomrom OnCollisionEnter ( Kollisjon koll) { Feilsøk . Logg ('Kollisjon'); // Sjekk om det til og med registrerer en kollisjon. Hvis det fungerer kan du fjerne denne linjen hvis (koll.spillobjekt. stikkord == 'Fiende') { // ser om objektet spilleren din kolliderte med har en tagg som heter 'Enemy'