Så här skapar du grundläggande Android-spel med enhet

I en tidigare Appual's handledning med titeln Hur man skapar ett Basic Unity Platform Game ( och dess del 2) gick vi över med Unity och den inbyggda WebGL-plugin-modulen för att skapa ett enkelt HTML5-baserat webbläsarspel - i den här liknande handledningen, vi ska gå över hur man skapar ett grundläggande Android- spel med hjälp av Unity.

Krav:

  • Enhet
  • En bra textredigerare som NotesPad ++ (Valfritt men rekommenderat)
  • Android SDK
Om du inte redan har det, bör du börja ladda ner och installera Unity SDK och även Android SDK. Vi behöver Android SDK så att vi kan testa spelets APK i en Android-miljö.

Starta enhet och skapa ett nytt projekt. Gör det till ett 2D-projekt.

Det finns flera paneler att bekanta sig med - hierarkipanelen som innehåller alla våra scenelement (scen = vilken nivå du arbetar för närvarande). Sedan finns det fliken Spel som används för att spela / testa ditt spel medan du befinner dig inne i redigeraren, och till höger har du inspektionspanelen där du kommer att redigera olika saker som belysning, fysik etc.

Det första vi vill göra är att skapa en sprite - det här är vår huvudperson (som vi kontrollerar). Du kan antingen rita din egen sprite, precis som att dra en ruta med ögonen, eller du kan ta en sprite från internet - bara se till att det är en .png-fil (transparent bakgrund).

Dra och släpp spritet på huvudfönstret (det största fönstret) - det kommer också att visas på hierarkipanelen till vänster.

Så nu ska vi skapa några plattformar - det kan vara enkla rutor eftersom vi enkelt kan ändra storlek på dem för att skapa väggar och andra plattformar.

Så bara skapa en ny fyrkantig sprite och dra och släpp den på scenfönstret som du gjorde med din sprittecken.

Nu måste vi instruera Enhet för att ge fysiken till vår huvudperson - klicka på din huvudsprittecken (den ska bli markerad i blått i scenfönstret), och sedan på inspektionspanelen leta efter GameObjects.

Klicka på Lägg till komponent> Fysik 2D> RigidBody2D. Detta lägger automatiskt till fysik till din sprite, som du annars annars skulle behöva skriva i en annan SDK.

Vi vill förhindra att huvudsprite-karaktären spinner runt kontrollen - så hitta fliken Begränsningar på inspektionspanelen (med huvudsprite som fortfarande är markerad i scenfönstret) och kryssa i rutan för Freeze Rotation Z.

Om du trycker på Play-knappen ska din huvudsprittecken falla från himlen och bara falla oändligt - vi ska ta hand om det senare, men notera bara hur vi enkelt kunde tillämpa fysik. Den fysik vi tillämpade beror på vilken form de appliceras på - så om du till exempel tillämpade samma fysik på en sfär, skulle den rulla runt.

Vi vill också fixa vår orientering för att förhindra att karaktären snurrar och freewheeling runt. Hitta "begränsningar" i inspektören med spelaren vald och kryssa i rutan för att frysa rotation Z. Klicka nu på spel igen och du ska hitta din spelare nu faller från himlen till hans oändliga döm.

För att stoppa vår huvudsprite karaktär bara faller oändligt, kommer vi att behöva lägga till en collider. Detta är i grund och botten bara den solida konturen av en form som vi lägger till i huvudspritteckenet. Markera ditt huvudsprite-tecken, klicka på Lägg till komponent> Fysik 2D> BoxCollider2D.

Gör nu samma sak med plattformen du skapade tidigare. Din huvudsprite karaktär borde nu kollidera med plattformen och stanna där.

Så nu vill vi se till att kameran följer din huvudsprite karaktär - inuti scenen bör det redan finnas ett kamerobjekt. Du vill dra det ovanpå huvudspritteckenet.

Det här är speciellt viktigt om du skapar en 3D-baserad löpare, något som Slope, där du behöver kameran, förblir ständigt bakom det primära spelobjektet (ditt huvudsprite-tecken).

Gå nu till hierarkipanelen och i listan över GameObjects vill du dra kameran under huvudspritteckenet (Player GameObject). Detta kommer att göra huvudsprite-tecknet till kamerans " förälder" . Så när spelaren GameObject rör sig runt skärmen, ska kameran följa.

Så för denna speltutorial, kommer vi bara att skapa ett grundläggande oändligt löpare spel, något som Run 3, där din huvudperson kommer att springa över skärmen och undvika hinder (eller spelet över om du slår ett hinder. att ta några skript, de flesta kommer att finnas i denna guide.

Högerklicka på mappen Tillgångar och skapa en ny mapp - namnge det Skript . Högerklicka på den här nya mappen och klicka på Skapa> C # Script och namnge det PlayerControls . Detta skript kommer att definiera beteendet hos vår huvudsakliga sprittecken.

När du dubbelklickar på det här nya skriptet ska det öppnas i Visual Studio - alternativt (och min personliga preferens), du kan redigera den i något liknande NotesPad ++.

Skriptfilen bör redan ha lite kedjekodskod inuti den - i princip är det skript som behöver lämnas ensam eller justeras efter dina behov och kommer att spara oss mycket tid. Så vi ska lägga till ett nytt objekt.

Ovanför raden tomgång Start ():

offentlig Rigidbody2D rb;

Nästa bit kod som vi måste lägga till kommer att gå in i Start () och används för att hitta den styva kroppen - i princip instruerar vi Unity att lokalisera den fysik som vi bifogar GameObjects (vår huvudsprite karaktär) och Start () kommer att utföras när ett nytt objekt eller skript skapas.

Så hitta sedan fysikobjektet.

 rb = GetComponent < Rigidbody2D > (); 

Och du lägger till den här raden i uppdateringen ()

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

Vilken uppdatering () görs uppdateras ständigt, så någon kod som läggs in där kommer att köras kontinuerligt (om inte objektet förstörs). Så vad vi har gjort är att instruera manuset att vi vill att den styva kroppen ska ha en ny vektor med samma hastighet på Y-axeln (rb.velocity.y), men med en hastighet av 3 på den horisontella axeln. I framtiden kan du också använda ' FixedUpdate ()' som är likartat men annorlunda, för det kan du styra uppdaterings / uppdatera mängden av manuset.

Spara skriptet och gå tillbaka till Enhet, klicka sedan på ditt huvudsprite-tecken för att markera det. Gå till Lägg till komponent> Skript i inspektionspanelen och lägg till det skript vi just sparat. Nu när du klickar på knappen Spela, ska huvudspritteckenet kontinuerligt röra sig mot plattformskanten.

PRO TIPS: Om problemet är med din dator eller en bärbar dator, bör du försöka använda Reimage Plus-programvaran som kan skanna förvaret och ersätta korrupta och saknade filer. Detta fungerar i de flesta fall där problemet uppstått på grund av systemkorruption. Du kan ladda ner Reimage Plus genom att klicka här

Skapa spelarens ingångskontroller

Så därför att det här är ett oändligt löpare spel med hinder måste vi lägga till kontroller för spelaren som en "hopp" -knapp.

Öppna om manuset tidigare, och vi lägger till den här extra koden:

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

Du kommer att lägga in det i uppdateringen () -metoden, och vad det i grunden gör är att Unity säger att när spelaren klickar på sin musknapp (som kommer att översättas som en skärmknapp på Android), kommer huvudspritecken att hoppa in luften. Detta beror på att vi har lagt till en hastighet på Y-axeln med ett värde av 5 (ett högre värde skulle innebära ett högre hopp, förstås).

Om du inte känner till kodning, använder vi ett If- påstående eftersom If är i grunden en gör eller inte typ av instruktion - det säger bokstavligen om detta händer, gör det här kommandot . Så om spelaren inte klickar på musen (eller knackar på sin Android-skärm) så kommer skriptet uppenbarligen inte att springa.

Fortsätt och klicka på Play-knappen och se till att den fungerar korrekt innan du fortsätter.

Därefter kommer vi att lägga till våra hinder (som kan förstöra huvudpersonens sprite), ett spelresultat och en spel över meny.

Om du testat spelet hittills är det enda problemet vi har hittills att trycka på hoppknappen vi skapade kommer att hoppa karaktären oavsett om de är jordade eller inte - det här är i grunden Flappy Birds och inte en löpare som vi vill . Men vi ska fixa det.

I skriptet lägger du till denna bit kod ovanför Metoden Update ():

 offentliga transformera groundCheck; offentlig transformation startposition; offentliga float groundCheckRadius; public LayerMask whatIsGround; privat bool onGround; Och lägg sedan till den här nästa raden i uppdateringsmetoden ovanför if- satsen: onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); Och nästa kommer du att ändra följande rad för att inkludera && onGround om (Input.GetMouseButtonDown (0) && onGround) {Så hela vårt script ska i princip se ut så här: Public Class PlayerControls : MonoBehaviour { public Rigidbody2D rb; offentliga transformera groundCheck; offentlig transformation startposition; offentliga float groundCheckRadius; public LayerMask whatIsGround; privat bool onGround; void Start () {rb = GetComponent (); } void Update () {rb.velocity = ny Vector2 (3, rb.velocity.y); onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); om (Input.GetMouseButtonDown (0) && onGround) {rb.velocity = ny Vector2 (rb.velocity.x, 5); }}} 

För att förklara vad vi har gjort har vi skapat en ny transformation, vilket innebär en position i spelvärldens utrymme. Vi har satt sin radie och vi instruerar Unity att kontrollera om radien överlappar med vårt grundlager - och så om vår radie synkroniseras med marken, ska vår karaktär kunna hoppa och om vi redan är i luften från ett hopp, vi borde inte kunna hoppa igen. I grund och botten kommer onGround att vara sant om transformen heter groundCheck överlappar med markskiktet. Förhoppningsvis är det meningsfullt.

Så spara skriptet och gå tillbaka till Unity, och du kommer märka att fler alternativ har lagts till inspektören efter att ha markerat spelaren. Det här är offentliga variabler och vi kan justera dessa efter vår smak.

Högerklicka på hierarkin och skapa ett nytt tomt objekt och dra det så att det ligger under huvudteckenet i huvudfönstret - placera det här tomma objektet där vi vill att golvet ska detekteras. Byt namn på objektet till Check Ground och dra sedan det under spelarens spelobjekt som vi gjorde tidigare med kameran (för att skapa ett förhållande mellan föräldrar och barn mellan objekten). Nu kommer det tomma objektet att följa huvudpersonens sprite, precis som kameran, och det kommer kontinuerligt att kontrollera golvavståndet.kamera

Välj nu huvudpersonens sprit och gå till inspektionspanelen - dra kontrollen Mark-objektet i det utrymme som heter groundCheck. Positionen "transform" ska vara lika med positionen för det här nya objektet, och där det står Radius, gör det 0, 1.

Vi måste definiera markskiktet. Välj bara mark terrängen och i inspektören, hitta knappen för lager: Standard (det är en rullgardinsruta) och välj Lägg till lager.

Markera nu marken som lagret för vår plattform, och upprepa detta för alla andra plattformar i spelfönstret. Där står det Vad är Ground på vårt huvudpersonliga spriteobjekt, välj också markskiktet.

Vad vi har gjort är att instruera spelarskriptet att utföra en kontroll - om den lilla punkten på skärmen överlappar något som matchar skiktet, kommer tecknet bara hoppa om detta är sant.

Spel över på kollision och spelmeny

Så för att paketera allt, är de sista sakerna vi vill göra A: Gör kolliderande med hinder resulterar i ett spel över, och B: Skapa ett spel över menyskärmen med en play again-knapp.

Vad du i grund och botten vill göra är:

  1. Lägg till ett Spelarobjekt och tilldela en styv kropp och en collider till ditt val.
  2. Lägg till ett fiendeobjekt och tilldela en styv kropp och en collider av ditt val till det. (och valfritt, lägg till Enemy tag till det)
  3. Skapa ett nytt C # -skript och lägg till det som en komponent till Player (eller använd ett skript som är kopplat till spelaren, behöver inte skapa en ny om du redan har en)
  4. Lägg till detta i ditt skript:
 void OnCollisionEnter (Collision Coll) {Debug.Log ("Collision"); // Kontrollera om det ens registrerar en kollision, om det fungerar kan du ta bort den här raden om (coll.gameobject.tag == "Enemy") { // ser om objektet som din spelare kolliderade med har en tagg som heter "Enemy ", kan detta ersättas med om (coll.gameobject.name == ... men det är enkelt att göra det med en tagg. // Lägg till din kod här, som: Application.LoadLevel (" GameOver "); Debug .Log ("Working"); // Om du arbetar kan du ta bort den här raden. } 

Spela runt med det exemplet manuset - med några försök och fel får du det att göra exakt vad vi behöver.

Nu för att se exakt hur man skapar en GameOver-nivå med en Play-knapp, se den sista delen av Appuals guide. Så här skapar du en Basic Unity Platform Game Pt. 2.

PRO TIPS: Om problemet är med din dator eller en bärbar dator, bör du försöka använda Reimage Plus-programvaran som kan skanna förvaret och ersätta korrupta och saknade filer. Detta fungerar i de flesta fall där problemet uppstått på grund av systemkorruption. Du kan ladda ner Reimage Plus genom att klicka här

Facebook Twitter Google Plus Pinterest