Hvordan lage grunnleggende Android-spill med enhet

I en tidligere Appuals opplæring med tittelen Hvordan lage et Basic Unity Platform Game ( og del 2), gikk vi over med Unity og den innebygde WebGL-plugin-modulen for å lage et enkelt HTML5-basert nettleserspill - i denne lignende opplæringen, vi skal gå over hvordan å lage et grunnleggende Android- spill ved hjelp av Unity.

Krav:

  • Enhet
  • En god tekstredigerer som NotesPad ++ (Valgfritt men anbefalt)
  • Android SDK
Hvis du ikke allerede har det, bør du begynne å 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 enhet og opprett et nytt prosjekt. Gjør det til et 2D-prosjekt.

Det er flere paneler å bli kjent med - hierarkipanelet som inneholder alle våre sceneelementer (scene = hvilket nivå du jobber for). Deretter er det fanen Spill som brukes til å spille / teste spillet ditt mens du er inne i redaktøren, og til høyre har du inspektørpanelet hvor du vil redigere ulike ting som belysning, fysikk, etc.

Det første vi ønsker å gjøre er å lage en sprite - dette vil være vår hovedperson (som vi kontrollerer). Du kan enten tegne din egen sprite, som å bare tegne et 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 spritet på hovedscenevinduet (det største vinduet) - det vil også vises på hierarkipanelet til venstre.

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

Så bare opprett en ny firkantet sprite og dra og slipp den på scenevinduet som du gjorde med sprite karakteren din.

Nå må vi instruere Enhet for å gi fysikk til hovedpersonen vår - klikk på hovedspirit karakteren din (den skal bli markert i blått i scenevinduet), og deretter på inspeksjonspanelet, lete etter GameObjects.

Klikk på Legg til komponent> Fysikk 2D> RigidBody2D. Dette vil automatisk legge til fysikk til sprite, som du ellers ville måtte skanne deg selv i en annen SDK.

Vi vil forhindre at hovedsprite-karakteren spinner rundt ute - så finn fanebladet Begrensninger i inspeksjonspanelet (med hovedsprite fremdeles fremhevet i scenevinduet), og merk av i boksen for Freeze Rotation Z.

Hvis du klikker på Play-knappen, bør hovedsprite karakteren falle fra himmelen og bare falle uendelig - vi skal ta vare på det senere, men bare ta hensyn til hvordan vi enkelt kunne bruke fysikk. Fysikken vi brukte er avhengig av formen de blir brukt på - så hvis du brukte samme fysikk til en sfære, ville den for eksempel rulle rundt.

Vi ønsker også å fikse vår orientering for å forhindre at tegn spinner og freewheeling 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 burde finne at spilleren din nå faller fra himmelen til sin uendelige dømmekraft.

For å stoppe vår hovedsprite karakter fra bare å falle uendelig, må vi legge til en collider. Dette er egentlig bare det solide omrisset av en form som vi legger til hovedsprite karakteren. Marker hovedsprite karakteren din, klikk Legg til komponent> Fysikk 2D> BoxCollider2D.

Gjør det samme nøyaktige med plattformen du opprettet tidligere. Din hovedsprite karakter burde nå kollidere med plattformen og bli der.

Så nå vil vi sørge for at kameraet følger din hovedsprite 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 lager en 3D-basert løper, noe som Slope hvor du trenger kameraet til å forbli hele tiden bak det primære spillobjektet (hovedsprite karakteren).

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

Så for dette spillet opplæringen, skal vi bare lage et grunnleggende endeløst løpere type spill, noe som Run 3, hvor hovedpersonen din vil løpe over skjermen og unnslippe hindringer (eller spill over hvis du treffer et hinder. Dette går å ta noen skript, de fleste vil bli gitt i denne veiledningen.

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

Når du dobbeltklikker på dette nye skriptet, bør det åpnes i Visual Studio - alternativt (og min personlige preferanse), du kan redigere den i noe som NotesPad ++.

Skriptfilen bør allerede ha en liten kjeleplatekode inne i det - i utgangspunktet er dette skript som må stå 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 Rigidbody2D rb;

Den neste koden vi trenger å legge til, går innenfor Start () og er vant til å finne den stive kroppen - i utgangspunktet instruerer vi Unity å finne fysikken vi knytter til GameObjects (vår hovedsprite karakter), og Start () skal utføres når en ny gjenstand eller et skript er opprettet.

Så neste, finn fysikkobjektet.

 rb = GetComponent < Rigidbody2D > (); 

Og du vil legge til denne linjen inne i oppdateringen ()

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

Hva oppdatering () gjøres oppdateres hele tiden, slik at en kode som er lagt inn der, vil løpe kontinuerlig (med mindre objektet blir ødelagt). Så det vi har gjort er å instruere skriptet at vi vil at den stive kroppen skal ha en ny vektor med samme hastighet på Y-aksen (rb.velocity.y), men med en hastighet på 3 på den horisontale akse. I fremtiden kan du også bruke ' FixedUpdate ()', som er lik men forskjellig, fordi det kan du kontrollere oppdaterings / oppdateringsmengden av skriptet.

Lagre skriptet og gå tilbake til Unity, og klikk deretter på hovedsprite karakteren for å markere den. I Kontrollpanel, gå til Legg til komponent> Skript og legg til skriptet vi nettopp har lagret. Nå når du klikker på Play-knappen, skal hovedsprite-tegnet kontinuerlig bevege seg mot plattformkanten.

PRO TIPS: Hvis problemet er med datamaskinen eller en bærbar PC / notatbok, bør du prøve å bruke Reimage Plus-programvaren som kan skanne arkiver og erstatte skadede og manglende filer. Dette fungerer i de fleste tilfeller der problemet er oppstått på grunn av systemkorrupsjon. Du kan laste ned Reimage Plus ved å klikke her

Opprette spillerinngangskontroller

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

Åpne scriptet fra før, og vi skal legge til denne tilleggskoden:

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

Du skal sette det inne i Update () -metoden, og det som i utgangspunktet gjør, er at Unity forteller at når spilleren klikker på museknappen (som skal oversettes som et trykknapp på Android), vil hovedsprite-karakteren hoppe inn luften. Dette er fordi vi har lagt til en hastighet på Y-aksen med en verdi på 5 (en høyere verdi ville bety et høyere hopp, selvfølgelig).

Hvis du ikke er så kjent med kodingen, brukte vi en If- setning fordi If er i utgangspunktet en do eller ikke slags instruksjon - det står bokstavelig talt om dette skjer, gjør denne kommandoen . Så hvis spilleren ikke klikker på musen (eller tapper på Android-skjermen), så vil skriptet åpenbart ikke løpe.

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

Deretter skal vi legge til våre hindringer (som kan ødelegge hovedpersonens sprite), et spillpoeng og et spill over meny.

Hvis du har testet spillet så langt, er det eneste problemet vi har så langt at det å trykke på hoppeknappen vi opprettet, vil hoppe tegnet, 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 delen av koden over oppdateringen () -metoden:

 offentlig Transform groundCheck; offentlig Transform startposisjon; offentlig float groundCheckRadius; offentlig LayerMask whatIsGround; privat bool onGround; Og legg deretter til denne neste linjen i oppdateringsmetoden over if- setningen: onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); Og neste vil du endre denne følgende linjen for å inkludere && onGround hvis (Input.GetMouseButtonDown (0) && onGround) {Så hele vårt skript burde i utgangspunktet se slik ut: offentlig klasse PlayerControls : MonoBehaviour { public Rigidbody2D rb; offentlig Transform groundCheck; offentlig Transform startposisjon; offentlig float groundCheckRadius; offentlig LayerMask whatIsGround; privat bool onGround; void Start () {rb = GetComponent (); } ugyldig oppdatering () {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 for å sjekke om radiusen overlapper med vårt grunnlag - og så hvis radiusen vår er synkronisert med bakken, burde vår karakter hoppe, og hvis vi allerede er i luften fra et hopp, vi burde ikke kunne hoppe igjen. I utgangspunktet vil onGround være sant hvis transformasjonen som heter GroundCheck, overlapper grunnlaget. Forhåpentligvis er det fornuftig.

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

Høyreklikk på hierarkiet, og opprett et nytt tomt objekt, og dra det slik at det ligger under hovedkarakteren i hovedvinduet - plasser dette tomme objektet der vi vil at gulvet skal oppdages. Gi nytt navn til objektet til Check Ground, og dra det under spillets spillobjekt som vi gjorde tidligere med kameraet (for å opprette et foreldre-barn forhold mellom objektene). Nå vil det tomme objektet følge hovedpersonens sprite, akkurat som kameraet, og det vil kontinuerlig sjekke gulvavstanden. Cam

Velg nå hovedkarakteren og gå til inspeksjonspanelet - dra Kontroller-objektet inn i rommet som kalles groundCheck. Transformasjonsposisjonen skal være lik plasseringen til dette nye objektet, og hvor det står Radius, gjør det 0, 1.

Vi må definere grunnlaget. Bare velg bakken terrenget og i inspektøren, finn knappen for Lag: Standard (det er en rullegardinboks) og velg Legg til lag.

Velg nå bakken som laget for vår plattform, og gjenta dette for andre plattformer i spillvinduet. Hvor det står Hva er Ground på vår hovedpersonens spriteobjekt, velg også grunnlaget.

Det vi har gjort er å instruere spillerens skript for å utføre en sjekk - hvis det lille punktet på skjermen overlapper alt som passer til laget, vil tegnet hoppe bare hvis dette er sant.

Spill over på kollisjon og spillmeny

Så for å pakke det hele opp, er de endelige tingene vi vil gjøre A: Gjør kolliderer med hindringer resultere i et spill over, og B: Opprett et spill over menyskjermbildet med en spill igjen-knapp.

Det du egentlig ønsker å gjøre er:

  1. Legg til et Spillerobjekt og tilordne en stivdel og en collider etter eget valg.
  2. Legg til et fiendtlig objekt og tilordne en stivbody og en collider av ditt valg til det. (og valgfritt, legg til Enemy tag til det)
  3. Opprett et nytt C # -skript og legg det til som en komponent til Player (eller bruk et skript som er koblet til spilleren, trenger ikke å opprette en ny hvis du allerede har en)
  4. Legg til dette i skriptet ditt:
 void OnCollisionEnter (Collision Coll) {Debug.Log ("Collision"); // Sjekk for å se om det selv registrerer en kollisjon, hvis det virker kan du fjerne denne linjen hvis (coll.gameobject.tag == "Enemy") { // ser om objektet spilleren din kolliderte med, har en tag kalt "Enemy ", kan dette bli erstattet med hvis (coll.gameobject.name == ... men å bruke en kode er en enkel måte å gjøre det på. // Legg til koden din her, som: Application.LoadLevel (" GameOver "); Debug .Log ("Working"); // Hvis du arbeider, kan du fjerne denne linjen. } 

Spille rundt med det eksempelscriptet - med noen prøve og feil, får du det til å gjøre akkurat det vi trenger.

Nå for å se nøyaktig hvordan du oppretter et GameOver-nivå med en Play-knapp, kan du se den siste delen av Appuals guide. Hvordan lage et grunnleggende Unity Platform Game Pt. 2.

PRO TIPS: Hvis problemet er med datamaskinen eller en bærbar PC / notatbok, bør du prøve å bruke Reimage Plus-programvaren som kan skanne arkiver og erstatte skadede og manglende filer. Dette fungerer i de fleste tilfeller der problemet er oppstått på grunn av systemkorrupsjon. Du kan laste ned Reimage Plus ved å klikke her

Facebook Twitter Google Plus Pinterest