Enhet 2D led Avstånd, gångjärn, mål och fasta led

Vad du ska skapa

Introduktion

Enhet är en välkänd, väl dokumenterad och mycket erkänd spelmotor. Det är en plattformslösning, och du kan också skapa spel eller applikationer som riktar sig till flera plattformar (bland annat iOS, Android, Web och PC). Ursprungligen var Unity inriktad på 3D-utveckling, men nyligen släpptes verktyg för 2D-utveckling.

Enhet är ett utmärkt val för utvecklande spelutvecklare, eftersom det fungerar för de flesta mobila, stationära och konsolplattformar, och ännu bättre är det gratis att använda för utvecklare och studior med lägre intäkter.

En av de viktigaste komponenterna i Unity är fysikskarv. Dessa leder har fysiska egenskaper (som namnet antyder) och låter dig skapa flera kopplingar mellan objekt inom din scen.

Med hjälp av leder kan du beskriva en koppling mellan två objekt, vilket innebär att du kan simulera fysiken hos nästan alla flervalsobjekt du kan tänka på, inklusive dörrar, glidplattformar, kedjor eller till och med försvinnande bollar!

Denna handledning kommer att fokusera på att förklara hur 2D fysik leder fungerar och hur man använder dem för att uppnå stora effekter (utan att offra spelprestanda).

förutsättningar

Först, se till att du har den senaste versionen av Unity, som du kan ladda ner här. I den här handledningen använder vi versionen 5.4.1f1. Se till att du använder den senaste Unity-versionen; annars kan du ha problem med att följa handledningen och använda fysikskarv.

Innan vi börjar vill jag också särskilt tacka Ryukin Studio för att låta oss använda deras paket 2D Platformer Art Pack - Demo för denna handledning.

Nästa, ladda ner Unity2DJointsStarter fil. Unzip och öppna projektet i Unity. Demo-scenen ska öppnas automatiskt, men om inte, kan du öppna den från projektets Scen mapp.

Scenen ska se ut som följer:


Som du kan se har vi en karaktär och flera statiska plattformar placerade runt scenen. Tanken bakom denna handledning är att skapa ett litet 2D-plattformsspel när du använder 2D-lederna för att skapa hinder för spelaren att övervinna. Under hela handledningen får du prova var och en av Unitys 2D-fogtyper och se hur de fungerar, med undantag för Hjulfäste 2D.

Om du trycker på spel ser du att alla grundläggande spelfunktioner för spelet redan är implementerade. Du kan använda tangentbordspilarna för att flytta tecknet och mellanslagstangenten för att hoppa.

Avstånd Gemensam 2D

Fjärrledet tillåter en sprite som styrs av 2D fysik att rotera runt en viss punkt, samtidigt som ett visst avstånd hålls kvar från den punkten. Du använder fjärrförbandet 2D för att skapa det första hindret, ett svängande blad. Skapa en ny GameObject i Position (4,75, -1,25, 0) och kalla det Blad.

Nästa, expandera GameAssets mapp och öppna plattformar mapp. Där hittar du flera prefabs som används för att skapa nivåplattformar. Dra Platform6 prefab från mappen och släpp den över Blad GameObject. Detta kommer att göra det till ett barn av det objektet.

Nu behöver du redigera några av egenskaperna hos det här nya spelobjektet. Först, ändra Platform6 namn till Plattform och sedan dess position till (-0.07042211, 3.60032, 0). Ställ nu in Beställa i lager till 3 i Sprite Renderer komponent.

Inuti Box Collider 2D, inaktivera Används av Effector parameter och ta bort den bifogade Plattform Effector 2D komponent. Slutligen lägg till en Rigidbody 2D, uppsättning Är kinematisk till sant och vända Frys Rotation på in Z.

Plattformen som håller kniven är klar. Det är dags att lägga till bladet självt. Inuti Gratis tillgångar \ Sprite mapp, välj AxeBlade sprite och dra den över Blad GameObject, skapa ett nytt barn.

Som du säkert har märkt är sprite för stor, och det är inte på rätt ställe. Ändra Placera till (-0,11, 3,56, 0) och den Skala till (0,5, 0,5, 1). Ställ också in Beställa i lager till 2.

Innan du kan göra bladet att fungera måste du lägga till flera komponenter till den. Börja med att lägga till en Polygon Collider 2D och a Rigidbody 2D. Se till att Massa är satt till 10.

Du är nu redo att lägga till Avstånd Gemensam 2D. Lägg till Avstånd Gemensam 2D komponent. Som du kanske märker har den här nya komponenten flera parametrar som du kan anpassa för att ge det bästa resultatet för ditt spel.

Skräck inte, du lär dig snart vad alla dessa parametrar gör och hur du kan justera dem. Du märker också att när du har komponenten kopplad till AxeBlade, en grön linje sträcker sig från AxeBlade till mitten av skärmen. Detta är utgångspunkten, den Anslutet ankare fast egendom.

Kör scenen och håll ögonen på bladet. Omedelbart märker du att bladet flyger över skärmen tills det stannar nära ursprungspunkten, och börjar sedan rulla fram och tillbaka på fogen. Du måste fixa det här problemet.

Vänd din uppmärksamhet åt Avstånd Gemensam 2D komponent i Inspektör. Den första parametern är Aktivera kollision. Detta avgör om de två objekt som är förbundna med leden kan kollidera med varandra. I det här fallet vill du inte att detta ska hända, så lämna det obekant.

Den andra parametern är Ansluten styv kropp. Medan ena änden av avståndsförbindelsen alltid är förbunden med objektet som innehåller komponenten, kan du använda det här fältet för att skicka en referens till ett objekt för den andra änden av fogans anslutning. Om du lämnar fältet tomt kopplar Unity helt enkelt den andra änden av fogen till en fast punkt i scenen.

Du vill ansluta AxeBlade till Plattform i så fall dra så Plattform till Ansluten styv kropp fält.

Med anslutningen inställd och AxeBlade fortfarande valda, borde du nu se de två objekt som är anslutna av fogen i Scen se. Du kan kontrollera anslutningen genom att ändra Y värdet av AxeBlade. inteGlöm attställa in AxeBlade Placera tillbaka till (-0,11, 3,56, 0) när du har spelat med det.

Nästa parameter för komponenten är Automatiskt konfigurera anslutet ankare. Du bör markera den här rutan om du vill att Unity automatiskt ställer in ankarplatsen för det andra objektet som denna gemensamma ansluts till. Vad är ankaret, kanske du frågar? Tja, vi kommer att prata om det på ett ögonblick, men för nu måste du lära dig att ankarpunkten kan ställas in manuellt eller automatiskt (av enhet).

I det här fallet vill du lämna fältet avmarkerat, eftersom vi ska sätta ankaret manuellt.

Följande parameter är Ankare. Den här indikerar var fältets slutpunkt fäster GameObject som anges i objektets lokala koordinatutrymme. I Scen visa med AxeBlade vald, kan du se ankarpunkten som en ofylld blå cirkel centrerad över AxeBlade. Lämna standardvärdet omodifierat (0, 0).

Observera att den ofyllda blå cirkeln som representerar fogens första ankarpunkt kan visas fylld om du för närvarande har Omvandla verktyg som valts i Scen se. På samma sätt ser du en vit kvadrat om du har Skala verktyg valt. I båda fallen visar att ankaret bort från (0, 0) visar att det verkligen är en ofylld cirkel.

De Anslutet ankare Parametern specificerar ankarpunkten i den andra änden av leden. Om Ansluten styv kropp fältet är tomt, detta värde ligger i scenens koordinatsystem. Men när Ansluten styv kropp är inställd, som det är nu, Anslutet ankare koordinater hänvisar till den anslutna styva kroppens lokala koordinatutrymme. Denna ankarpunkt visas i bilden ovan som en solid blå cirkel centrerad över Plattform spelobjekt. Återigen kan du lämna detta värde på (0, 0).

Som med Ankare parameter, kan du låta Unity automatiskt ställa in avståndet för leden genom att aktivera Automatisk inställningsavstånd fält. När det här alternativet är aktiverat, identifierar Unity automatiskt avståndet mellan de två objekten och ställer det som ett avstånd som fogen håller mellan dem. I vårt specifika fall vill vi ha den här funktionen.

De Distans parameter, som namnet antyder, anger avståndet för att upprätthålla mellan båda objekten. Tillbaka i Scen se, du kan se en liten grön linje som skär linjen som förbinder de två objekten. Detta kan lätt ses om du flyttar AxeBlade-objektet från Plattform, som i bilden nedan.

Denna linje indikerar avståndet som drivs av leden. När du kör scenen kommer fogen att röra sig AxeBlade så att Ankare du definieras är vid den punkt där den lilla linjen är. Du kan öka eller minska detta värde genom att vrida Auto Konfigurera Joint av. Kom ihåg att ställa in AxeBlade position tillbaka till (-0,11, 3,56, 0) när du har spelat med sina värden. Auto Configure Distance bör också kontrolleras.

Nästa parameter är Endast maximal avstånd. Om det är aktiverat, kommer foget endast att genomdriva ett maximalt avstånd, vilket innebär att objekten kan komma närmare varandra men aldrig längre bort än det värde som anges i Distans fält. I det här exemplet vill du att avståndet ska åtgärdas, så lämna den här parametern avmarkerad.

Slutligen är den sista parametern Break Force. Här kan du ange den kraftnivå som du vill använda för att bryta fogen. I grund och botten, om kraftnivån uppnås, kommer fogen att raderas och förbindelsen mellan de två objekten kommer att försvinna. När värdet är inställt på Infinity, betyder det att fogen är obrott. För det här scenariot vill du att det ska vara obrott, så lämna fältet som det är.

Eftersom du vill att bladet ska svänga som en pendel, ändra dess Rotation till (0, 0, 310).

Nu trycker du på Spela, och du kommer att se AxeBlade hänger på Plattform.

Okej, så bladet svänger, men när det träffar spelaren händer ingenting. Du vill döda spelaren och få den att starta om på den senaste kontrollpunkten. För att göra detta, gå till GameAssets mapp och öppna skript mapp. Ta tag i Blad script och lägg till den i AxeBlade. Om du trycker på Spela Återigen borde spelaren nu dö när bladet träffar.

Den slutliga konfigurationen är följande:


För att avsluta, ta tag i Blad GameObject från Hierarki och släpp det i hinder mapp. Detta kommer att skapa en prefab av svängbladet.

Gångjärn gemensamt 2D

De Gångjärn gemensamt 2D komponent tillåter ett GameObject som styrs av rigid kroppsfysik att fästas till en punkt i rymden runt vilken den kan rotera. Rotationen kan hända som svar på en kollision eller startas av ett motorns vridmoment som tillhandahålls av fogen själv. Du kan och bör sätta gränser för att förhindra att gångjärnet gör en full rotation.

För att lära sig grunderna i gångjärnsleden skapar du en dubbel fälldörrmekanism där spelaren måste släppa för att fortsätta nivån. Vi gör det!

Lägg till en ny tom GameObject, namnge den Gångjärn, och placera den i Placera (18,92, 0, 0). Öppna sedan Tillgångar \ Free Assets \ Sprites och dra två MetalPlatform sprites in i Gångjärn GameObject. Namn den första HingePlat1 och den andra HingePlat2.

Placera dem sida vid sida; de HingePlat1 bör placeras på Placera (0, 0, 0) och den HingePlat2 vid (2,5, 0, 0). Ändra Beställa i lager av båda till 2.

För att lägga till Gångjärn gemensamt 2D komponent, måste du lägga till ytterligare två komponenter till sprites. Välj HingePlat1 och lägg till en Box Collider 2D och a Rigidbody 2D. Under Rigidbody 2D parameter, kolla på Är kinematisk fast egendom. Upprepa samma steg för HingePlat2 (utan att kontrollera Is Kinematic-egenskapen).

Du kanske också märker att Storlek av Box Collider 2D är större än HingePlat1 sprite, vilket leder till felaktig kollisionsdetektering mellan spelaren och plattformen. För att lösa problemet, ändra egenskapen Storlek (inuti Box Collider 2D) av båda HingePlat1 och HingePlat2 till (2,45, 0,5).

Detta HingePlat2 kommer att vara den första fälleldörren. Därför måste du tilldela en ny komponent som heter Gångjärn gemensamt 2D. Denna komponent har flera nya egenskaper; vi täcker bara de nya.

Aktivera kollision innebär att de två anslutna objekten kan kollidera mellan dem. Ansluten styv kropp specificerar var det andra objektet är som denna gemensamma ansluts till. Lägg till HingePlat1 till detta fält. Använd motor anger om gångjärnsmotorn ska vara aktiverad. Du bör kolla den här egenskapen. Motorhastighet specificerar målmotorhastigheten i grader / sek. Ställ den på -100 (för att återgå till ursprunglig position från uppåtläge).

Maximal motorkraft representerar det maximala vridmomentet (eller rotationen) som motorn kan applicera när man försöker nå målhastigheten. Du borde sätta det på 25Använd gränser, som namnet antyder representerar gränsvärdet för rotationsvinkelgränsen. Kolla upp det!

Nedre vinkel är den nedre änden av rotationsbågen tillåten av gränsen, medan Övre vinkel är den övre änden av rotationsbågen tillåten av gränsen. Ändra Övre vinkel till 60. Brytvridmoment liknar Break Force och specificerar den rotationsnivå som behövs för att bryta och ta bort foget. Återigen betyder oändlighet att det är oföränderligt.

Avmarkera nu Auto Konfigurera anslutning. Du måste ställa in Ankare och Anslutet ankare manuellt. Den förra bör ställas till (-1.12,0), och den senare till (1.09,0). Din scen borde nu se ut som följande bild:


Den slutliga HingePlat2 konfigurationen är:

Kör ditt spel, och låt oss testa den första fälleldörren.

Om allt är okej, är det dags att gå vidare och skapa den andra fälleldörren. Förfarandet är exakt lika med ovannämnda beskrivning; Den enda skillnaden ligger i konfigurationsdetaljerna hos Gångjärn gemensamt 2D. De viktigaste stegen är:

  1. Lägg till ytterligare två MetalPlatform sprites till Gångjärn GameObject.
  2. Namnge dem HingePlat3 och HingePlat4, och ställa in Beställa i lager till 2 och den Placera till (4,87, 0, 0) och (7,25, 0, 0) respektive.
  3. Lägg till en RigidBody 2D och a Box Collider 2D till båda plattformarna.
  4. Ändra Storlek av båda Box Collider 2D till (2.45,0.5).
  5. HingePlat4 borde ha Är kinematisk aktiverad.
  6. Lägg till Gångjärn gemensamt 2D egendom till HingePlat3.
  7. Lägg till HingePlat4 in i Ansluten styv kropp av HingePlat3.
  8. Avmarkera kryssrutan Auto Konfigurera anslutning.
  9. Ändra Ankare till (1,5, 0) och den Anslutet ankare till (-1, 0).
  10. Kolla Använd motor egendom och ställa in Motorhastighet till 100 och den Maximal motorkraft till 25.
  11. Kolla Använd gränser, och den Övre vinkel borde vara -60.

Kör ditt spel, och låt oss testa den dubbla fälleldörren.

Eftersom vi vill tvinga spelaren att passera genom den dubbla fälleldörren måste vi skapa några väggar runt den. Välj Gångjärn GameObject och från Tillgångar \ Free Assets \ Sprites mapp lägg till sex MetalPlatform in i Gångjärn GameObject. Namnge dem från Wall1 till Wall4 och ändra Beställa i lager till 2.

Placera Wall1 i Placera (-0,9, -1,43, 0) och ändra Z Rotation till 90. Återstående ska konfigureras enligt följande:

  • Wall2 Position: (-0,9, -3,8, 0), Z Rotation: 90 

  • Wall3 Position: (8,2, 1,55, 0), Z Rotation: 90

  • Wall4 Position: (8,2, 3,95, 0), Z Rotation: 90

Nu, för varje vägg bör du lägga till ytterligare en komponent, a Box Collider 2D. För varje Box Collider 2D ändra Storlek till (2,21, 0,63). Lägg sedan till a Plattform Effector 2D till varje vägg och ställa in Ytbåge till 360 och den Side Arc till 180. Gå tillbaka till Box Collider 2D och vänd Används av Effector på.

Slutresultatet ska likna följande:

Slutligen dra Gångjärn GameObject in i GameAssets \ Hinder mapp för att skapa din andra prefab.

Target Joint 2D

Target Joint 2D ansluter till ett specifikt mål, snarare än ett annat styvt kroppsobjekt, som andra leder normalt gör. Vi kommer att tillämpa denna gemensamma för att skapa en hinderplattform som rör sig upp och ner.

Det första du behöver göra är att skapa själva plattformen. På Gratis tillgångar / Sprites mapp där hittar du MetalPlatform sprite. Dra det och placera det på scenen.

Byt namn till RisingPlatform och dess Placera till (35, -6, 0) och ställ in Beställa i lager till 2. Du behöver några komponenter för att göra detta arbete. Lägg till en Rigidbody 2D och a Box Collider 2D. Ställ sedan in Massa till 20 och kolla Frysta position X och Frys Rotation Z. På Box Collider 2D, se till att Storlek är satt till (2,35, 0,55). Slutligen ställa in Gravity Scale till 0 så att objektet inte påverkas av tyngdkraften.

Grundkomponenterna är nu färdiga. Det är dags för dig att lägga till Target Joint 2D komponent. Som nämnts ovan Target Joint 2D Anslut inte till ett annat objekt med en styv kropp; i stället ansluter det till ett specifikt mål. Detta är en fjäder typ gemensam och kan användas för att plocka upp och flytta föremål som verkar under gravitation, som vår rörliga plattform.

Låt oss ta en närmare titt på själva komponenten. De Ankare fungerar precis som i föregående leder, så det är inte nödvändigt att förklara det. De Mål sätter världskoordinater mot vilka foget försöker röra sig. Detta är ett mycket viktigt fält, eftersom denna gemensamma kommer att försöka hålla noll linjärt avstånd mellan Ankare och den Mål poäng. För det här exemplet vill du ha Mål att vara (35, -6).

Därefter har du Automatisk konfigurera mål. Om den här egenskapen är aktiverad, beräknar fogen sig självt. Om du lämnar det här alternativet ändras målet när plattformen flyttas. Eftersom du inte vill att det ska hända, lämnar du den här rutan avmarkerad (avmarkera Automatisk konfigurera mål).

Följande är Max Force; här ställer du den kraft som fogen kan applicera när du försöker nå målpositionen. Ställ in detta värde till 80.

De Dämpningsförhållandet Är graden till vilken du vill undertrycka vårsvingningen. Detta värde kan gå från 0 till 1, där 1 betyder ingen rörelse. Du vill att plattformen ska röra sig fritt, så sätt detta fält till 0. Därefter har du Frekvens som, som namnet antyder, anger frekvensen vid vilken fjädern svänger samtidigt som man försöker nå målet. Ställ in denna parameter till 5.

Slutligen är den sista Break Force, vilket är identiskt med de föregående lederna, så låt värdet stanna som standard. 

Eftersom du vill att din plattform ska fortsätta över tiden måste du ändra Mål position från tid till annan. Lyckligtvis har du redan skriptet för att hantera det. Gå till skript mapp, hitta TracktorPlatform-skript, och lägg till det i ditt spelobjekt. Uppsättning Mål A till (35, -6) och Mål B till (35, 0). De Tid borde vara 2.

I slutet ska din komponent se ut så här:

Om du trycker på Spela, du borde kunna se den resulterande målmedlet som fungerar. Glöm inte att skapa en prefab, som du gjorde med de tidigare hindren, och placera den i hinder mapp.

Fast gemensam 2D

Fixed Joint 2D används för att hålla två objekt kontrollerade av styv kroppsfysik i förhållande till varandra. Därför kompenseras båda föremålen alltid i en viss position och vinkel.

För att använda denna gemensamma skapar du en metallplattform som bara kan flyttas när spelaren flyttar en magnet kopplad till den. Spelaren måste trycka magneten för att ta bort plattformen från sin väg och sedan gå vidare på nivån.

Börja med att skapa ett tomt GameObject, namnge det MagnetPlatform, och sätt dess Placera till (41,81, 5,22, 0). Nästa, ta tag i Magnet sprite från sprites mapp och släpp den över MagnetPlatform. Ställ in Magnet Placera till (0,55, 3,15, 0) och den Beställa i lager till 3.

Lägg sedan till en Rigidbody 2D komponent och a Circle Collider 2D. Ställ in Massa till 200 och vänd Frys Rotation Z på. Se till att RadieCircle Collider är satt till 0,4. I slutet, din Magnet borde se något så här:


Nu, från sprites mapp, dra MetalPlatform sprite in the MagnetPlatform GameObject. Ställ in Placera av MetalPlatform till (0,57, -1,73, 0), den Rotation till (0, 0, 90), och den Skala till (2, 1, 1). Ställ in Beställa i lager till 3.

Lägg sedan till följande komponenter: Rigidbody 2D, och a Box Collider 2D. På Rigidbody 2D, ställa in Massa till 1000 och aktivera Frys Rotation Z. Slutligen, på BoxCollider 2D, ställa in Storlek till (2,31, 0,52).

Nu när allt är klart är det dags för dig att konfigurera Fixed Joint 2D och upprätta sambandet mellan magneten och metallplattformen. Med MetalPlatform välj, lägg till FixedJoint 2D komponent.

Denna nya fog tillåter två spelobjekt med en styv kropp för att upprätthålla en relativ linjär och vinkelförskjutning mot varandra. I det här fallet vill du ha metallplattformen för att hålla ett visst avstånd från magneten.

Dessa linjära och vinkliga förskjutningar ställs in på de relativa positionerna och orienteringarna för de två anslutna spelobjekten. Det betyder att när du ändrar läget för ett av objekten i Scenvy, du kommer också att uppdatera offsets.

Denna fog använder en simulerad fjäder som är konfigurerad för att vara så stel som möjligt. Det är dock möjligt att ändra vårens styrka och göra den svagare. Denna simulerade våren applicerar sin kraft mellan föremålen, och det är ansvarigt för att hålla de förskjutningar du vill ha.

Titta på själva komponenten hittar du flera fält som du redan är bekant med.

Med undantag för två av dessa fält fungerar alla parametrar precis som på de andra lederna, så det är inte nödvändigt att förklara dem igen. Angående Dämpningsförhållandet, den här parametern representerar graden som du vill undertrycka fjäderoscillationen på. Du kan ställa in värden från 0 till 1, där 1 betyder ingen rörelse.

De Frekvens är frekvensen vid vilken fjädern svänger medan de två anslutna objekten närmar sig separationsavståndet. Denna parameter kan ta värden från 1 till 1000000. Ju högre värde desto hårdare blir våren.

Observera att även om högre värden betyder en styvare fjäder, om du ställer in Frekvens till 0 kommer våren att vara helt styv.

När det gäller det hinder du försöker bygga är allt du behöver göra att dra Magnet spel objekt till Ansluten styv kropp fält. Alla övriga parametrar kan lämnas med standardvärdena.

Tryck Spela och testa det nya hinderet.

Nu när hindret är klart, skapa en prefab av det genom att dra GameObject till hinder mapp.

Slutsats

Detta avslutar den första handledningen om Unity Joints 2D. Du lärde dig om fyra leder, nämligen avståndet, gångjärnet, målet och de fasta lederna. Med denna kunskap kan du redan börja skapa dina 2D-världar fyllda med dynamiska och komplexa objekt. I den andra handledningen lär du dig information om glider, relativ, vår och friktion.

Om du har några frågor eller kommentarer, kan du som alltid glömma att släppa en rad i kommentarerna.