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

I en tidligere Appuals vejledning med titlen Sådan oprettes et Basic Unity Platform Game ( og dets del 2), gik vi over med Unity og den indbyggede WebGL-plugin til at oprette et simpelt HTML5-baseret browserspil - i denne lignende tutorial, vi går over hvordan man laver et grundlæggende Android- spil ved hjælp af Unity.

Krav:

  • Enhed
  • En god teksteditor som NotePad ++ (Valgfrit men anbefalet)
  • Android SDK
Hvis du ikke allerede har det, skal du begynde 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 enhed og opret et nyt projekt. Gør det et 2D-projekt.

Der er flere paneler til at blive bekendt med - hierarkiet panelet, som vil indeholde alle vores scene elementer (scene = uanset niveau du arbejder i øjeblikket på). Derefter er der fanen Spil, som bruges til at spille / teste dit spil, mens du er inde i editoren, og til højre har du inspektionspanelet, hvor du vil redigere forskellige ting som belysning, fysik osv.

Det første, vi vil lave, er at skabe en sprite - det vil være vores hovedperson (som vi kontrollerer). Du kan enten tegne din egen sprite, ligesom du kun tegner en firkant med øjne, 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 på hovedscenevinduet (det største vindue) - det vises også på hierarki-panelet til venstre.

Så nu vil vi oprette et par platforme - det kan være enkle firkanter, fordi vi nemt kan ændre størrelsen på dem til at lave vægge og andre platforme.

Så skal du bare oprette en ny firkantet sprite og trække og slip den på scenevinduet som du gjorde med din sprite karakter.

Nu skal vi instruere Unity for at give fysik til vores hovedkarakter - klik på din primære karakter (det skal blive fremhævet i blåt i scenevinduet), og så på inspektionspanelet, kigge efter GameObjects.

Klik på Tilføj komponent> Fysik 2D> RigidBody2D. Dette vil automatisk tilføje fysik til din sprite, som du ellers ville have skrevet til dig selv i en anden SDK.

Vi vil forhindre, at hovedsprite-karakteren springer rundt uden kontrol - så find fanebladet Begrænsninger i inspektionspanelet (med hovedsprite fremhævet stadig i scenevinduet), og marker afkrydsningsfeltet for Freeze Rotation Z.

Hvis du rammer Play-knappen, skal dit hovedsprite-tegn falde fra himlen og bare falde uendeligt - vi skal tage sig af det senere, men bare notere, hvordan vi nemt kunne anvende fysik. Den fysik, vi anvendte, er afhængig af den form, de anvendes på - så hvis du brugte samme fysik på en kugle, ville den for eksempel rulle rundt.

Vi ønsker også at rette vores orientering for at forhindre, at tegnet spinder og freewheeling rundt. Find 'begrænsninger' i inspektøren med den valgte spiller og kryds i boksen for at fryse rotation Z. Klik nu på afspilning igen, og du skal finde din afspiller nu falder fra himlen til hans uendelige dømmekraft.

For at stoppe vores hovedsprite karakter fra bare at falde uendeligt, skal vi tilføje en collider. Dette er dybest set bare det solide omrids af en form, som vi vil føje til hovedsprite karakteren. Fremhæv dit primære karakterkarakter, klik på Tilføj komponent> Fysik 2D> BoxCollider2D.

Nu gør det samme nøjagtige med den platform, du oprettede tidligere. Din primære sprite skal nu kollidere med platformen og blive der.

Så nu vil vi sørge for, at kameraet følger din primære karakter - indenfor scenen skal der allerede være et kameraobjekt. Du vil trække dette oven på hovedsprite karakteren.

Dette er især vigtigt, hvis du opretter en 3D-baseret runner, noget som Hældning, hvor du har brug for kameraet til at forblive konstant bag det primære spilobjekt (dit primære tegn).

Gå nu til hierarki-panelet og i listen over GameObjects vil du trække kameraet under hovedsprite-karakteren (Player GameObject). Dette vil gøre hovedsprite-tegnets " forælder" af kameraet. Så når spilleren GameObject bevæger sig rundt på skærmen, skal kameraet følge.

Så for dette spil tutorial, skal vi bare skabe et grundlæggende, uendeligt runner-type spil, noget som Run 3, hvor dit hovedkarakter løber over skærmen og undvige forhindringer (eller spil over hvis du rammer en forhindring. at tage nogle scripts, hvoraf de fleste vil blive givet i denne vejledning.

Højreklik på mappen Aktiver og opret en ny mappe - navngiv det Scripts . Højreklik nu på denne nye mappe og tryk på Create> C # Script og navngiv det PlayerControls . Dette script skal definere opførelsen af ​​vores hovedsprite karakter.

Når du dobbeltklikker på dette nye script, skal det åbne i Visual Studio - Alternativt (og min personlige præference), kan du redigere det i noget som NotesPad ++.

Skriptfilen skal allerede have en smule kedelpladekode inde i det - dybest set er dette script, der skal stå alene eller bare tilpasset dine behov, og vil spare os for meget tid. Så vi skal tilføje et nyt objekt.

Over linjen ugyldig Start ():

offentlig Rigidbody2D rb;

Den næste bit kode, som vi skal tilføje, går ind under Start () og bruges til at finde den stive krop - i grund og orden instruerer vi Unity til at finde den fysik, vi er knyttet til GameObjects (vores primære karakter) og Start () vil blive udført, når der oprettes en ny genstand eller et script.

Så næste, find fysikobjektet.

 rb = GetComponent < Rigidbody2D > (); 

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

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

Hvilken opdatering () gøres konstant opdateres, så en kode, der er tilføjet der, kører løbende (medmindre objektet er ødelagt). Så hvad vi har gjort er at instruere scriptet, at vi vil have den stive krop til at have en ny vektor med 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 ()', som er ens men forskellig, fordi der kan du kontrollere opdatering / opdatering af scriptet.

Gem scriptet og gå tilbage til Unity, og klik derefter på dit primære tegn for at fremhæve det. Gå til Tilføjelsespanel> Scripts i inspektionspanelet, og tilføj det script, vi netop har gemt. Nu, når du klikker på knappen Afspil, skal hovedsprite-karakteren løbende bevæge sig mod platformkanten.

PRO TIP: Hvis problemet er med din computer eller en bærbar computer / notesbog, skal du prøve at bruge Reimage Plus-softwaren, som kan scanne lagrene og udskifte korrupte og manglende filer. Dette virker i de fleste tilfælde, hvor problemet er opstået på grund af systemkorruption. Du kan downloade Reimage Plus ved at klikke her

Oprettelse af indlæsningskontroller til afspillere

Så fordi dette er et uendeligt runner-stil spil med forhindringer, skal vi tilføje kontroller til afspilleren, såsom en 'jump'-knap.

Genåb scriptet fra før, og vi vil tilføje denne ekstra kode:

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

Du skal sætte det inde i Update () -metoden, og hvad det grundlæggende betyder, siger Unity, at når spilleren klikker på deres museknap (som vil blive oversat som en skærmknap på Android), vil hovedsprite-karakteren hoppe ind luften. Dette skyldes, at vi har tilføjet en hastighed på Y-aksen med en værdi på 5 (en højere værdi ville betyde et højere spring selvfølgelig).

Hvis du ikke er for bekendt med kodning, brugte vi en If- sætning, fordi If er i grunden en do eller ikke slags instruktion - det siger bogstaveligt talt, hvis dette sker, skal du gøre denne kommando . Så hvis afspilleren ikke klikker på musen (eller tapper på deres Android-skærm), så vil scriptet naturligvis ikke løbe.

Fortsæt og klik på knappen Afspil og sørg for, at det fungerer korrekt, før du fortsætter.

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

Hvis du har testet spillet hidtil, er det eneste problem, vi har indtil videre, at trykke på hoppeknappen, vi skabte, vil springe karakteren, uanset om de er jordforbundne eller ej - det er dybest set Flappy Birds, og ikke en løber som vi vil . Men vi skal løse det.

I scriptet tilføjes denne kodekode over opdateringen () -metoden:

 offentlig Transform groundCheck; offentlig Transform startposition; offentlige float groundCheckRadius; public LayerMask whatIsGround; privat bool onGround; Og så tilføj denne næste linje til opdateringsmetoden over if- sætningen: onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); Og næste vil du ændre denne følgende linje for at inkludere && onGround hvis (Input.GetMouseButtonDown (0) && onGround) {Så hele vores script skal stort set se sådan ud: offentlig klasse PlayerControls : MonoBehaviour { public Rigidbody2D rb; offentlig Transform groundCheck; offentlig Transform startposition; offentlige float groundCheckRadius; public LayerMask whatIsGround; privat bool onGround; void 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, hvilket betyder en position i spilverdenens rum. Vi har sat sin radius og vi instruerer Unity for at kontrollere, om radiusen overlapper vores grundlag - og så hvis vores radius synkroniseres med jorden, skal vores karakter være i stand til at hoppe, og hvis vi allerede er i luften fra et hop, vi burde ikke være i stand til at hoppe igen. Grundlæggende vil onGround være sandt, hvis transformen hedder groundCheck overlapper jorden. Forhåbentlig giver det mening.

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

Højreklik på hierarkiet og lav et nyt tomt objekt, og træk det så, at det ligger under hovedkarakteren i hovedvinduet - Placer dette tomme objekt, hvor vi ønsker at detektere gulvet. Omdøb objektet til Check Ground, og træk det derefter under afspillerens spilobjekt som vi gjorde tidligere med kameraet (for at skabe et forældre-barn forhold mellem objekterne). Nu vil det tomme objekt følge hovedpersonens sprite, ligesom kameraet, og det vil løbende kontrollere gulvet distance.cam

Vælg nu hovedkarakteren og gå til inspektionspanelet - træk Check Ground-objektet ind i rummet kaldet groundCheck. 'Transform'-positionen skal svare til positionen for dette nye objekt, og hvor det står Radius, gør det 0, 1.

Vi skal definere grundlaget. Vælg bare jorden terræn og i inspektøren, find knappen for Layer: Default (det er en dropdown box) 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 det står Hvad er Ground på vores main character sprite objekt, skal du også vælge jordlaget.

Hvad vi har gjort, er at instruere spillerens script til at udføre en check - hvis det lille punkt på skærmen overlapper alt, der matcher laget, vil tegnet kun springe, hvis dette er sandt.

Spil over på kollision og spilmenu

Så for at pakke det hele op, er de endelige ting, vi vil gøre, A: At kolliderer med forhindringer resulterer i et spil over, og B: Opret et spil over menuskærmen med en afspilningsknap igen.

Hvad du grundlæggende ønsker at gøre er:

  1. Tilføj et Player- objekt og tildel en stivbody og en collider efter dit valg.
  2. Tilføj et fjendeobjekt og tildele en stiv krop og en collider af dit valg til det. (og valgfrit, tilføj Enemy tag til det)
  3. Opret et nyt C # -skript og tilføj det som en komponent til Player (eller brug et script, der er knyttet til afspilleren, ikke nødvendigt at oprette en ny, hvis du allerede har en)
  4. Tilføj dette i dit script:
 void OnCollisionEnter (Collision Coll) {Debug.Log ("Collision"); // Check for at se om det endda registrerer en kollision, hvis det virker, kan du fjerne denne linje hvis (coll.gameobject.tag == "Enemy") { // ser, om det objekt, din afspiller kolliderede med, har et tag kaldet "Enemy ", kan dette erstattes med, hvis (coll.gameobject.name == ... men ved at bruge et tag er det en nem måde at gøre det på. // Tilføj din kode her, som: Application.LoadLevel (" GameOver "); Debug .Log ("Working"); // hvis du arbejder, kan du fjerne denne linje. } 

Spil rundt med det eksempel script - med nogle forsøg og fejl, får du det til at gøre præcis, hvad vi har brug for.

For at se præcis, hvordan du opretter et GameOver-niveau med en afspilningsknap, skal du se det sidste afsnit i Appuals vejledning. Sådan opretter du en Basic Unity Platform Game Pt. 2.

PRO TIP: Hvis problemet er med din computer eller en bærbar computer / notesbog, skal du prøve at bruge Reimage Plus-softwaren, som kan scanne lagrene og udskifte korrupte og manglende filer. Dette virker i de fleste tilfælde, hvor problemet er opstået på grund af systemkorruption. Du kan downloade Reimage Plus ved at klikke her

Facebook Twitter Google Plus Pinterest