Hoe maak je een basis Android-spel met Unity

In een eerdere Appual-tutorial met de titel How to Create a Basic Unity Platform Game ( en zijn deel 2), zijn we met Unity en de ingebouwde WebGL plug-in een eenvoudig HTML5-gebaseerd browsergame begonnen - in deze gelijkaardige tutorial, we zullen bespreken hoe je een standaard Android- spel kunt maken met Unity.

Vereisten:

  • Eenheid
  • Een goede teksteditor zoals NotePad ++ (optioneel maar aanbevolen)
  • Android SDK
Als u dit nog niet hebt, moet u beginnen met het downloaden en installeren van de Unity SDK en ook de Android SDK. We hebben de Android SDK nodig, zodat we de APK van het spel in een Android-omgeving kunnen testen.

Start Unity en maak een nieuw project. Maak er een 2D-project van.

Er zijn verschillende panelen waarmee u vertrouwd kunt raken: het paneel Hiërarchie dat al onze scènelementen bevat (scène = het niveau waarop u momenteel werkt). Dan is er het tabblad Game dat wordt gebruikt voor het spelen / testen van je spel terwijl je in de editor zit, en aan de rechterkant heb je het Inspector paneel, waar je verschillende dingen zoals verlichting, fysica, etc. zult bewerken.

Het eerste dat we willen doen is een sprite maken - dit zal ons hoofdpersonage zijn (dat we controleren). Je kunt je eigen sprite tekenen, zoals gewoon een vierkant tekenen met ogen, of je kunt een sprite van internet halen - zorg er gewoon voor dat het een .PNG-bestand is (transparante achtergrond).

Versleep je sprite naar het hoofdscenervenster (het grootste venster) - deze verschijnt ook in het hiërarchische paneel aan de linkerkant.

Dus nu maken we een paar platforms - dit kunnen eenvoudige vierkanten zijn, omdat we ze gemakkelijk kunnen verkleinen om muren en andere platforms te maken.

Dus maak gewoon een nieuwe vierkante sprite en sleep deze naar het Scene-venster zoals je deed met je sprite-karakter.

Nu moeten we Unity instrueren fysica aan onze hoofdpersoon te geven - klik op je hoofdsprite-teken (het moet in het Scene-venster blauw worden gemarkeerd) en zoek vervolgens in het Inspector-paneel naar GameObjects.

Klik op Component toevoegen> Fysica 2D> RigidBody2D. Dit voegt automatisch fysica toe aan je sprite, die je anders zelf in een andere SDK zou moeten schrijven.

We willen voorkomen dat het hoofdsprite-teken uit de hand loopt - dus vind het tabblad Beperkingen in het Inspecteur-paneel (met de hoofdsprite nog steeds gemarkeerd in het Scene-venster) en vink het vakje aan voor Freeze Rotation Z.

Als je op de Play-knop drukt, zou je hoofdsprite-personage uit de lucht vallen en gewoon eindeloos vallen - daar gaan we later voor zorgen, maar let alleen op hoe we gemakkelijk fysica konden toepassen. De fysica die we hebben toegepast, is afhankelijk van de vorm waarop ze worden toegepast, dus als je dezelfde fysica op een bol toepast, zou deze bijvoorbeeld ronddraaien.

We willen ook onze oriëntatie verbeteren om te voorkomen dat het personage ronddraait en freewheelt. Zoek 'beperkingen' op in het infovenster met de geselecteerde speler en vink het vakje aan om de rotatie te bevriezen Z. Klik nu opnieuw op spelen en je ziet nu dat je speler uit de lucht valt naar zijn oneindige doom.

Om te voorkomen dat ons hoofdsprite-personage eindeloos valt, moeten we een spider toevoegen. Dit is eigenlijk gewoon de vaste vorm van een vorm die we zullen toevoegen aan het hoofdsprite karakter. Markeer uw hoofdsprite-karakter, klik op Component toevoegen> Fysica 2D> BoxCollider2D.

Doe nu precies hetzelfde met het platform dat u eerder hebt gemaakt. Je hoofdpersonage moet nu botsen met het platform en daar blijven.

Dus nu willen we ervoor zorgen dat de camera je hoofdsprite-personage volgt - in de scène moet er al een camera-object zijn. U wilt dit naar het hoofdsprite-teken slepen.

Dit is vooral belangrijk als je een 3D-runner aan het maken bent, zoiets als Slope, waarbij je de camera nodig hebt om constant achter het primaire game-object te blijven (je belangrijkste sprite-personage).

Ga nu naar het paneel Hiërarchie en in de lijst met GameObjects sleept u de camera onder het hoofdsprite-teken (Player GameObject). Hierdoor wordt het hoofdsprite-teken de ' ouder' van de camera. Dus wanneer de speler GameObject over het scherm beweegt, zou de camera moeten volgen.

Dus voor deze game-tutorial gaan we een eenvoudig eindeloos runner-achtig spel maken, zoiets als Run 3, waar je hoofdpersonage over het scherm loopt en obstakels ontwijkt (of als je een obstakel raakt als je een obstakel raakt.) om een ​​paar scripts te maken, waarvan de meeste in deze handleiding zullen worden gegeven.

Klik met de rechtermuisknop op de map Assets en maak een nieuwe map - noem deze Scripts . Klik nu met de rechtermuisknop op deze nieuwe map en klik op Create> C # Script en noem het PlayerControls . Dit script gaat het gedrag van ons hoofdsprite karakter definiëren.

Wanneer u dubbelklikt op dit nieuwe script, moet dit openen in Visual Studio - alternatief (en mijn persoonlijke voorkeur), u kunt het bewerken in zoiets als NotePad ++.

Het scriptbestand zou al een beetje ketelplaatcode moeten bevatten - in feite is dit een script dat alleen moet worden gelaten of gewoon moet worden aangepast aan uw behoeften en ons veel tijd zal besparen. Dus we gaan een nieuw object toevoegen.

Boven de regel void Start ():

openbare Rigidbody2D rb;

Het volgende stukje code dat we moeten toevoegen, zal binnen de Start () gaan en wordt gebruikt om de rigidbody te vinden - eigenlijk, instrueren we Unity om de fysica te vinden die we hebben gekoppeld aan de GameObjects (ons belangrijkste sprite-teken), en Start () wordt uitgevoerd wanneer een nieuw object of een nieuw script wordt gemaakt.

Dus zoek vervolgens het fysica-object op.

 rb = GetComponent < Rigidbody2D > (); 

En u voegt deze regel toe aan de update ()

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

Wat Update () doet, wordt voortdurend vernieuwd, dus elke code die daar wordt toegevoegd, blijft doorlopend (tenzij het object wordt vernietigd). Dus wat we hebben gedaan is het script te instrueren dat we willen dat het rigide lichaam een ​​nieuwe vector heeft met dezelfde snelheid op de Y-as (rb.velocity.y), maar met een snelheid van 3 op de horizontale as. In de toekomst kunt u ook ' FixedUpdate ()' gebruiken. Dit is vergelijkbaar maar anders, omdat u daar de update / refresh-hoeveelheid van het script kunt beheren.

Sla het script op en ga terug naar Unity en klik vervolgens op je hoofdsprite-teken om het te markeren. Ga in het Inspector-paneel naar Component> Scripts toevoegen en voeg het script toe dat we zojuist hebben opgeslagen. Wanneer u nu op de knop Afspelen klikt, moet het hoofdsprite-teken voortdurend naar de rand van het platform bewegen.

PRO TIP: Als het probleem zich voordoet met uw computer of een laptop / notebook, kunt u proberen de Reimage Plus-software te gebruiken die de opslagplaatsen kan scannen en corrupte en ontbrekende bestanden kan vervangen. Dit werkt in de meeste gevallen, waar het probleem is ontstaan ​​door een systeembeschadiging. U kunt Reimage Plus downloaden door hier te klikken

Spelbesturingselementen maken

Dus omdat dit een eindeloos spel in runner-stijl met obstakels is, moeten we besturingselementen voor de speler toevoegen, zoals een 'jump'-knop.

Open het script van voordien opnieuw en we gaan deze aanvullende code toevoegen:

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

Je zet dat in de Update () methode, en wat het eigenlijk doet, is het vertellen aan Unity dat wanneer de speler op de muisknop klikt (die zal worden vertaald als een schermtikken op Android), het hoofdsprite-personage erin zal springen de lucht. Dit komt omdat we een snelheid op de Y-as hebben toegevoegd met een waarde van 5 (een hogere waarde zou natuurlijk een hogere sprong betekenen).

Als je niet al te bekend bent met codering, hebben we een If- instructie gebruikt omdat If in feite een soort instructie is of niet - het letterlijk zeggen als dit gebeurt, voer deze opdracht uit . Dus als de speler niet op de muis klikt (of op zijn Android-scherm tikt), dan zal het script natuurlijk niet worden uitgevoerd.

Ga je gang en klik op de knop Afspelen en zorg ervoor dat deze correct werkt voordat je verder gaat.

Vervolgens gaan we onze obstakels toevoegen (die de sprite van het hoofdpersonage kunnen vernietigen), een spelscore en een game over menu.

Als je het spel tot nu toe hebt getest, is het enige probleem dat we tot nu toe hebben, dat het indrukken van de springknop die we hebben gemaakt, het personage zal overspringen, ongeacht of ze geaard zijn of niet - dit is eigenlijk Flappy Birds en geen hardloper zoals we willen . Maar dat gaan we oplossen.

Voeg in het script dit stukje code toe boven de methode Update ():

 public Transform groundCheck; public Transform startPosition; openbare vlottergrondCheckRadius ; public LayerMask whatIsGround; private bool onGround; En voeg vervolgens deze volgende regel toe aan de updatemethode boven de if- instructie: onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); En vervolgens verander je deze volgende regel om && onGround if (Input.GetMouseButtonDown (0) && ongroundound) in te voegen {Dus ons hele script zou er in principe zo moeten uitzien: public class PlayerControls : MonoBehaviour { public Rigidbody2D rb; public Transform groundCheck; public Transform startPosition; openbare vlottergrondCheckRadius ; public LayerMask whatIsGround; private bool onGround; void Start () {rb = GetComponent (); } void Update () {rb.velocity = new Vector2 (3, rb.velocity.y); onGround = Physics2D.OverlapCircle (groundCheck.position, groundCheckRadius, whatIsGround); if (Input.GetMouseButtonDown (0) && onGround) {rb.velocity = new Vector2 (rb.velocity.x, 5); }}} 

Om uit te leggen wat we hebben gedaan, hebben we een nieuwe transformatie gecreëerd, wat betekent een positie in de ruimte van de spelwereld. We hebben de straal ingesteld en we geven Unity opdracht om te controleren of de straal overlapt met onze grondlaag - en dus als onze straal wordt gesynchroniseerd met de grond, moet ons personage kunnen springen en als we al in actie zijn de lucht van een sprong, we zouden niet opnieuw kunnen springen. Fundamenteel zal onGround waar zijn als de transform met de naam groundCheck overlapt met de grondlaag. Hopelijk is dat logisch.

Dus bewaar het script en ga terug naar Unity en je zult merken dat er meer opties zijn toegevoegd aan de Inspector nadat de speler is gemarkeerd. Dit zijn openbare variabelen en we kunnen deze naar wens aanpassen.

Klik nu met de rechtermuisknop op de hiërarchie en maak een nieuw leeg object en sleep het zo dat het onder het hoofdpersonagescript staat in het hoofdscenervenster - plaats dit lege object op de plaats waar we de vloer willen detecteren. Hernoem het object naar Check Ground en sleep het onder het spelobject van de speler zoals we eerder met de camera deden (om een ​​ouder-kind relatie tussen de objecten te creëren). Nu zal het lege object de sprite van het hoofdpersonage volgen, net als de camera, en zal het de vloer distance.cam voortdurend controleren

Selecteer nu de hoofdtekensprite en ga naar het Inspecteurspaneel - sleep het object Check Ground naar de spatie genaamd groundCheck. De 'transform' positie moet gelijk zijn aan de positie van dit nieuwe object, en waar het Radius zegt, maak het 0.1.

We moeten de grondlaag definiëren. Selecteer gewoon het terrein en zoek in de Inspector de knop voor Laag: Standaard (het is een vervolgkeuzelijst) en kies Laag toevoegen.

Selecteer nu grond als de laag voor ons platform en herhaal dit voor andere platforms in het spelvenster. Waar het zegt: Wat is Ground op ons hoofdpersonagesprite-object, selecteer ook de grondlaag.

Wat we hebben gedaan is het spelerscript instrueren om een ​​controle uit te voeren - als het kleine punt op het scherm overlapt met iets dat overeenkomt met de laag, springt het personage alleen als dit waar is.

Game Over op botsing en gamemenu

Dus om alles in te pakken, zijn de laatste dingen die we willen doen: A: botsingen maken met obstakels resulteert in een game over en B: maak een game via het menuscherm met een knop Weer spelen.

Wat je eigenlijk wilt doen is:

  1. Voeg een Player- object toe en wijs er een rigidbody en een collider naar keuze aan toe.
  2. Voeg een vijand object toe en wijs een rigidbody en een collider naar keuze toe. (en optioneel voeg je een Enemy-tag toe)
  3. Maak een nieuw C # -script en voeg het als een component toe aan Player (of gebruik een script dat aan een speler is gekoppeld, het is niet nodig om een ​​nieuw script te maken als je al een script hebt)
  4. Voeg dit toe in je script:
 ongeldig OnCollisionEnter (Collision coll) {Debug.Log ("Collision"); // Controleer om te zien of het zelfs een botsing registreert, als het werkt, kunt u deze regel verwijderen als (coll.gameobject.tag == "Enemy") { // ziet of het object waarmee uw speler in botsing kwam een ​​tag heeft genaamd "Enemy ", dit kan worden vervangen door if (coll.gameobject.name == ... maar een tag gebruiken is een eenvoudige manier om het te doen. // Voeg hier je code toe, zoals: Application.LoadLevel (" GameOver "); Debug .Log ("Bezig"); // als u werkt, kunt u deze regel verwijderen. } 

Speel met dat voorbeeldscript - met wat vallen en opstaan, krijg je het om precies te doen wat we nodig hebben.

Om nu precies te zien hoe je een GameOver-niveau kunt maken met een Play-knop, bekijk je de laatste sectie van Appual's handleiding. Hoe maak je een Basic Unity Platform Game Pt. 2.

PRO TIP: Als het probleem zich voordoet met uw computer of een laptop / notebook, kunt u proberen de Reimage Plus-software te gebruiken die de opslagplaatsen kan scannen en corrupte en ontbrekende bestanden kan vervangen. Dit werkt in de meeste gevallen, waar het probleem is ontstaan ​​door een systeembeschadiging. U kunt Reimage Plus downloaden door hier te klikken

Facebook Twitter Google Plus Pinterest