Sådan oprettes grundlæggende Android-spil med enhed

i denne lignende vejledning gennemgår vi, hvordan man opretter en basis Android spil ved hjælp af enhed.



Krav:

  • Enhed
  • En god teksteditor som NotePad ++ (valgfri men anbefalet)
  • Android SDK
Hvis du ikke allerede har det, skal du begynde med at downloade og installere Unity SDK og også Android SDK. Vi har brug for Android SDK, så vi kan teste spillets APK i et Android-miljø.

Start Unity, og opret et nyt projekt. Gør det til et 2D-projekt.



Der er flere paneler at blive fortrolige med - Hierarkipanelet, der indeholder alle vores sceneelementer (scene = uanset hvilket 'niveau' du arbejder på). Derefter er der fanen Spil, der bruges til at spille / teste dit spil, mens du er inde i editoren, og til højre har du inspektorpanelet, hvor du vil redigere forskellige ting som belysning, fysik osv.



Den første ting, vi vil gøre er at oprette en sprite - dette vil være vores hovedperson (som vi kontrollerer). Du kan enten tegne din egen sprite, som bare at tegne en firkant med øjnene, eller du kan få fat i en sprite fra internettet - bare sørg for, at det er en .PNG-fil (gennemsigtig baggrund).



Træk og slip din sprite til hovedscenevinduet (det største vindue) - det vises også i hierarkipanelet til venstre.

Så nu opretter vi et par platforme - disse kan være enkle firkanter, fordi vi let kan ændre størrelsen på dem for at skabe vægge og andre platforme.

Så lav bare et nyt firkantet 'sprite', og træk og slip det på scenevinduet, som du gjorde med din sprite-karakter.



Nu skal vi instruere Unity om at give fysik til vores hovedperson - klik på din hovedsprite-karakter (den skal fremhæves med blåt i scenevinduet), og se derefter på 'GameObjects' på inspektorpanelet.

Klik på 'Tilføj komponent> Fysik 2D> RigidBody2D'. Dette tilføjer automatisk fysik til din sprite, som du ellers ville have været nødt til at script dig selv i en anden SDK.

Vi vil forhindre, at hovedsprite-karakteren spinder rundt uden for kontrol - så find fanen Begrænsninger i inspektorpanelet (med hovedspriten stadig fremhævet i scenevinduet), og marker afkrydsningsfeltet for 'Frys Rotation Z'.

Hvis du trykker på 'Afspil' -knappen, skal din hovedsprite-karakter falde ned fra himlen og bare falde uendeligt - det tager vi os af senere, men vær opmærksom på, hvordan vi let var i stand til at anvende fysik. Den fysik, vi anvendte, afhænger af den form, de anvendes på - så hvis du f.eks. Anvendte den samme fysik på en sfære, ville den rulle rundt.

Vi vil også rette vores orientering for at forhindre, at karakteren snurrer og løber rundt. Find 'begrænsninger' i inspektøren med den valgte spiller, og marker afkrydsningsfeltet for at fryse rotation Z. Klik nu på play igen, og du skal finde ud af, at din spiller nu falder ned fra himlen til hans uendelige undergang.

For at forhindre, at vores vigtigste sprite-karakter bare falder uendeligt, bliver vi nødt til at tilføje en kolliderer. Dette er dybest set bare den solide kontur af en form, som vi tilføjer til den vigtigste sprite-karakter. Fremhæv din vigtigste sprite-karakter, klik på “Tilføj komponent> Fysik 2D> BoxCollider2D.

Gør nu det samme nøjagtige med den platform, du oprettede tidligere. Din vigtigste sprite-karakter skal nu 'kollidere' med platformen og blive der.

Så nu vil vi sikre os, at kameraet følger din vigtigste sprite-karakter - inde i scenen skal der allerede være et kameraobjekt. Du vil trække dette på toppen af den vigtigste sprite karakter.

Dette er især vigtigt, hvis du opretter en 3D-baseret løber , noget som Hældning hvor du har brug for kameraet for at forblive konstant bag det primære spilobjekt (din vigtigste sprite-karakter).

Gå nu til hierarkipanelet, og på listen over GameObjects vil du trække kameraet under den vigtigste sprite karakter (Player GameObject). Dette vil gøre den vigtigste sprite karakter til ' forælder ' af kameraet. Så når Player GameObject bevæger sig rundt på skærmen, skal kameraet følge.

Så til denne spilvejledning opretter vi bare et grundlæggende endeløst løber-type spil, noget lignende Kør 3 , hvor din hovedperson vil løbe over skærmen og undvige forhindringer (eller 'game over', hvis du rammer en forhindring '. Dette vil tage et par scripts, hvoraf de fleste vil blive givet i denne vejledning.

Højreklik på mappen 'Aktiver', og opret en ny mappe - navngiv den Scripts . Højreklik nu på denne nye mappe og tryk på 'Opret> C # script' og navngiv det PlayerControls . Dette script vil definere opførelsen af ​​vores vigtigste sprite-karakter.

Når du dobbeltklikker på dette nye script, er det skulle gerne åbne i Visual Studio - alternativt (og min personlige præference), kan du redigere det i noget som NotePad ++.

Scriptfilen skal allerede have en smule 'kedelpladekode' inde i den - dybest set er dette script, der skal være alene eller bare tilpasses til dine behov, og det sparer os meget tid. Så vi tilføjer et nyt objekt.

Over linjen annullerer Start ():

offentlig Rigidbody2D rb;

Den næste kode kode, vi skal tilføje, går inden for Start () og bruges til at finde den stive krop - grundlæggende instruerer vi Unity om at finde den fysik, vi har knyttet til GameObjects (vores vigtigste sprite-karakter) og Start () udføres, når et nyt objekt eller script oprettes.

Så find det fysiske objekt.

rb = GetComponent< Stivkrop2D > ();

Og du vil tilføje denne linje inde i opdateringen ()

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

Hvad Update () gør opdateres konstant, så enhver kode, der tilføjes derinde, kører kontinuerligt (medmindre objektet ødelægges). Så hvad vi har gjort er at instruere scriptet om, at vi ønsker, at det stive legeme skal have en ny vektor, der bruger den samme hastighed på Y-aksen (rb.velocity.y), men med en hastighed på 3 på den vandrette akse. I fremtiden kan du også bruge ' FixedUpdate () ' hvilket er ens, men anderledes, for der kan du styre opdaterings- / opdateringsmængden af ​​scriptet.

Gem scriptet, og gå tilbage til Unity, og klik derefter på dit vigtigste sprite-tegn for at fremhæve det. I inspektorpanelet skal du gå til Tilføj komponent> Scripts og tilføje det script, vi lige har gemt. Nu når du klikker på knappen Afspil, skal sprite-hovedkarakteren løbende bevæge sig mod platformens kant.

Oprettelse af spillerindgangskontrol

Så fordi dette er et endeløst løberstilspil med forhindringer, er vi nødt til at tilføje kontroller til spilleren, f.eks. En 'spring' -knap.

Åbn scriptet igen fra før, og vi tilføjer denne ekstra kode:

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

Du kommer til at sætte det inde i Update () -metoden, og hvad det grundlæggende gør, er at fortælle Unity, at når spilleren klikker på deres museknap (som vil blive oversat som et skærmtryk på Android), vil sprite-hovedpersonen “hoppe ' i luften. Dette skyldes, at vi har tilføjet en hastighed på Y-aksen med en værdi på 5 (en højere værdi vil selvfølgelig betyde et højere spring).

Hvis du ikke er for fortrolig med kodning, brugte vi en Hvis erklæring fordi Hvis er dybest set en 'gør eller gør ikke' slags instruktion - det siger ordret Hvis dette sker, skal du udføre denne kommando . Så hvis afspilleren ikke klikker på musen (eller trykker på deres Android-skærm), vil scriptet naturligvis ikke køre.

Gå videre og klik på knappen 'Afspil', og sørg for, at den fungerer korrekt, inden du fortsætter.

Dernæst vil vi tilføje vores forhindringer (som kan 'ødelægge' hovedpersonens sprite), en game score og en 'game over' menu.

Hvis du har testet spillet hidtil, er det eneste problem, vi hidtil har, at ved at trykke på “spring” -knappen, vi oprettede, hopper karakteren, uanset om de er jordforbundne eller ej - dette er dybest set Flappy Birds og ikke en løber som vi vil have. Men vi skal ordne det.

I scriptet skal du tilføje denne bit kode over metoden Update ():

 offentlig Transform groundCheck; offentlig Transformer startposition; offentlig   flyde jordenCheckRadius; offentlig LayerMask whatIsGround; privat   bool onGround; Og tilføj derefter denne næste linje til opdateringsmetoden over hvis udsagn: onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); Og derefter vil du ændre denne følgende linje til at omfatte “&& onGround” hvis (Input.GetMouseButtonDown (0) && onGround) {Så hele vores script skal stort set se sådan ud: offentlig   klasse   PlayerControls : MonoBehaviour { offentlig Rigidbody2D rb; offentlig Transform groundCheck; offentlig Transformer startposition; offentlig   flyde jordenCheckRadius; offentlig LayerMask whatIsGround; privat   bool onGround; ugyldig   Start () {rb = GetComponent (); } ugyldig   Opdatering () {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 at forklare, hvad vi har gjort, har vi skabt en ny “transformation”, som betyder en position i rummet af spilverdenen. Vi har indstillet sin radius, og vi instruerer Unity om at kontrollere, om radius er overlappende med vores 'jord' -lag - og så hvis vores radius synkroniseres med 'jorden', skal vores karakter være i stand til at hoppe, og hvis vi vi allerede er i luften fra et spring, skulle vi ikke være i stand til at hoppe igen. I bund og grund, onGround vil være sandt hvis transformationen navngivet groundCheck overlapper jorden. Forhåbentlig giver det mening.

Så gem scriptet, og gå tilbage til Unity, så vil du bemærke, at der er blevet tilføjet flere muligheder til inspektøren efter fremhævelse af afspilleren. Disse er offentlige variabler, og vi kan tilpasse dem efter vores smag.

Højreklik nu på hierarkiet, og opret et nyt tomt objekt, og træk det, så det er under hovedpersonen sprite i hovedscenevinduet - placer dette tomme objekt, hvor vi ønsker, at gulvet skal detekteres. Omdøb objektet til 'Check Ground', og træk det derefter under spillerens spilobjekt som vi gjorde tidligere med kameraet (for at skabe et forhold mellem forældre og barn mellem objekterne). Nu følger det tomme objekt hovedpersonen sprite, ligesom kameraet, og det vil løbende kontrollere gulvafstanden. Kamera

Vælg nu hovedpersonens sprite og gå til inspektorpanelet - træk Check Ground-objektet ind i rummet kaldet “groundCheck”. 'Transform' positionen skal være lig med positionen for dette nye objekt, og hvor det siger 'Radius', skal du gøre det til 0,1.

Vi er nødt til at definere grundlaget. Vælg bare terrænet og i Inspektøren, find knappen til 'Lag: Standard' (det er en rulleliste), og vælg 'Tilføj lag'.

Vælg nu 'jorden' som laget til vores platform, og gentag dette for alle andre platforme i spilvinduet. Hvor der står 'Hvad er jorden' på vores hovedperson sprite-objekt, skal du også vælge jordlaget.

Det, vi har gjort, er at instruere spillerscriptet til at udføre en kontrol - hvis det lille punkt på skærmen overlapper med noget, der matcher laget, tegnet hopper kun, hvis dette er sandt.

Game Over på kollision og spilmenu

Så for at pakke det hele sammen, er de sidste ting, vi ønsker at gøre, A: Få kollidere med forhindringer til at resultere i et spil over, og B: Opret en 'game over' -menuskærm med en play igen-knap.

Hvad du grundlæggende vil gøre er:

  1. Tilføj en Spiller gøre indsigelse og tildele en stive krop og en kolliderer efter eget valg til det.
  2. Tilføj en Fjende gøre indsigelse og tildele en stive krop og en kolliderer af dit valg til det. (og valgfrit, tilføj 'Enemy' -tag til det)
  3. Opret en ny C # script og tilføj det som en komponent til Spiller (eller brug et hvilket som helst script, der er knyttet til afspilleren, ingen grund til at oprette et nyt, hvis du allerede har et)
  4. Tilføj dette i dit script:
ugyldig OnCollisionEnter ( Kollision coll) { Fejlfinde . Log ('Kollision'); // Kontroller, om det overhovedet registrerer en kollision, hvis det fungerer, kan du fjerne denne linje hvis (coll.gameobject. tag == 'Fjende') { // ser om objektet, som din spiller kolliderede med, har et tag kaldet 'Enemy