Enhet 2D ledd Avstand, hengsel, mål og faste ledd

Hva du skal skape

Introduksjon

Enhet er en velkjent, godt dokumentert og anerkjent spillmotor. Det er en multi-plattformløsning, og det lar deg også lage spill eller programmer rettet mot flere plattformer (blant annet iOS, Android, Web og PC). Opprinnelig var Unity fokusert på 3D-utvikling, men nylige utgivelser gir verktøy for 2D-utvikling.

Enhet er et godt valg for aspirerende spillutviklere, siden det fungerer for de fleste mobil-, skrivebords- og konsollplattformer, og enda bedre, det er gratis å bruke for utviklere og studioer med lavere inntekter.

En av de viktigste komponentene i enhet er fysikkledd. Disse leddene har fysiske egenskaper (som navnet antyder) og lar deg opprette flere sammenhenger mellom objekter innenfor din scene.

Ved hjelp av ledd kan du beskrive en sammenheng mellom to objekter, noe som betyr at du kan simulere fysikken til nesten hvilken som helst flersidig gjenstand du kan tenke på, inkludert dører, skyveplattformer, kjeder eller til og med ødelegge baller!

Denne opplæringen vil fokusere på å forklare hvordan 2D fysikk ledd fungerer og hvordan du bruker dem for å oppnå store effekter (uten å ofre spillytelsen).

Forutsetninger

Først må du sørge for at du har den nyeste versjonen av Unity, som du kan laste ned her. I denne opplæringen bruker vi versjonen 5.4.1f1. Pass på at du bruker den nyeste Unity-versjonen; ellers kan du ha problemer med å følge opplæringen og bruke fysikkleddene.

Før vi starter, vil jeg også gjerne takke Ryukin Studio for å la oss bruke deres pakke 2D Platformer Art Pack - Demo for denne opplæringen.

Deretter laster du ned Unity2DJointsStarter fil. Unzip og åpne prosjektet i Unity. Demo-scenen skal åpnes automatisk, men hvis ikke, kan du åpne den fra prosjektets scene mappe.

Scenen skal se slik ut:


Som du ser, har vi et tegn og flere statiske plattformer plassert rundt scenen. Tanken bak denne opplæringen er å lage et lite 2D plattformspill mens du bruker 2D-leddene for å skape hindringer for spilleren å overvinne. Gjennom hele denne opplæringen får du prøve ut hver av Unitys 2D-fellestyper og se hvordan de fungerer, med unntak av Hjulfeste 2D.

Hvis du trykker på spill, vil du se at alle de grunnleggende spillfunksjonene for spillet allerede er implementert. Du kan bruke tastaturpilene til å flytte tegnet og mellomromstasten for å hoppe.

Avstand Felles 2D

Avstandsforbindelsen tillater en sprite kontrollert av 2D fysikk å rotere rundt et bestemt punkt, samtidig som man opprettholder en viss avstand fra det punktet. Du vil bruke avstandsleddet 2D for å skape det første hinderet, et svingende blad. Lage en ny GameObject i Posisjon (4,75, -1,25, 0) og ring det Blad.

Deretter skal du utvide GameAssets mappe og åpne plattformer mappe. Der finner du flere prefabs som brukes til å skape nivåplattformene. Dra Platform6 prefab fra mappen og slipp den over Blad GameObject. Dette vil gjøre det til et barn av den gjenstanden.

Nå må du redigere noen av egenskapene til dette nye spillobjektet. Først, endre Platform6 navn til Plattform og deretter sin posisjon til (-0.07042211, 3.60032, 0). Sett nå Bestille i lag til 3 i Sprite Renderer komponent.

Inne i Box Collider 2D, deaktivere Brukt av Effector parameter og fjern den vedlagte Plattform Effector 2D komponent. Til slutt legg til en Rigidbody 2D, sett Er kinematisk å sanne og slå Fryse Rotasjon på inn Z.

Plattformen som holder bladet er klart. Det er på tide å legge selve bladet. Inne i Gratis aktiva \ Sprite mappe, velg AxeBlade Sprite og dra den over Blad GameObject, opprette et nytt barn.

Som du sikkert har lagt merke til, er sprite for stor, og det er ikke på rett sted. Endre Stilling til (-0,11, 3,56, 0) og Scale til (0,5, 0,5, 1). Still også inn Bestille i lag til 2.

Før du kan få bladet til å fungere, må du legge til flere komponenter til den. Begynn med å legge til en Polygon Collider 2D og a Rigidbody 2D. Pass på at Masse er satt til 10.

Du er nå klar til å legge til Avstand Felles 2D. Legg til Avstand Felles 2D komponent. Som du kanskje merker, har denne nye komponenten flere parametere som du kan justere for å produsere det beste resultatet for spillet ditt.

Frykt ikke, du vil snart lære hva alle disse parameterne gjør, og hvordan du kan justere dem. Du vil også legge merke til at når du har komponenten festet til AxeBlade, en grønn linje strekker seg fra AxeBlade til midten av skjermen. Dette er opprinnelsespunktet, den Tilkoblet anker eiendom.

Kjør scenen, hold øye med bladet. Umiddelbart vil du legge merke til at bladet flyr over skjermen til det stopper nær opprinnelsespunktet, og begynner deretter å rulle frem og tilbake på skjøten. Du må fikse dette problemet.

Vend din oppmerksomhet til Avstand Felles 2D komponent i Inspektør. Den første parameteren er Aktiver kollisjon. Dette avgjør om de to gjenstandene som er forbundet med leddet, kan kollidere med hverandre eller ikke. I dette tilfellet vil du ikke at dette skal skje, så la det være ukontrollert.

Den andre parameteren er Koblet stiv kropp. Mens den ene enden av avstandsforbindelsen alltid forblir koblet til objektet som inneholder komponenten, kan du bruke dette feltet til å sende en referanse til et objekt for den andre enden av skjøtens forbindelse. Hvis du lar dette feltet stå tomt, vil Unity bare koble den andre enden av leddet til et fast punkt i scenen.

Du vil koble til AxeBlade til Plattform i så fall, så dra Plattform til Koblet stiv kropp felt.

Med tilkoblingen satt opp og AxeBlade fortsatt valgt, bør du nå se de to objektene som er koblet til leddet i scene utsikt. Du kan sjekke forbindelsen ved å endre Y verdien av AxeBlade. ikkeglemme åsett AxeBlade Stilling tilbake til (-0,11, 3,56, 0) når du er ferdig med å spille med den.

Den neste parameteren til komponenten er Konfigurer automatisk tilkoblet anker. Du bør sjekke denne boksen hvis du vil at Unity automatisk skal sette ankerstedet for det andre objektet som denne fellesen kobles til. Hva er ankeret, kan du spørre? Vel, vi snakker om det i et øyeblikk, men for nå må du lære at ankerpunktet kan settes manuelt eller automatisk (av enhet).

I dette tilfellet vil du forlate dette feltet ukontrollert, siden vi skal sette ankeret manuelt.

Følgende parameter er Anker. Denne indikerer hvor sluttpunktet til felleset festes til GameObject som angitt i objektets lokale koordinatrom. I scene se med AxeBlade valgt, kan du se ankerpunktet som en ufylt blå sirkel sentrert over AxeBlade. La standardverdien være uendret (0, 0).

Legg merke til at den ufylte blå sirkelen som representerer skjøtets første ankerpunkt, kan vises fylt hvis du for øyeblikket har Forvandle verktøy valgt i scene utsikt. På samme måte vil du se et hvitt torg hvis du har Scale verktøy valgt. I begge tilfeller vil flytte ankeret vekk fra (0, 0) vise at det faktisk er en ufylt sirkel.

De Tilkoblet anker parameteren angir ankerpunktet til den andre enden av skjøten. Hvis Koblet stiv kropp feltet er tomt, denne verdien er i sceneens koordinatsystem. Men når Koblet stiv kropp er satt, som det er nå, den Tilkoblet anker koordinater refererer til den tilkoblede stive kroppens lokale koordinatrom. Dette ankerpunktet vises i bildet ovenfor som en solid blå sirkel sentrert over Plattform spillobjekt. Igjen kan du la denne verdien gå på (0, 0).

Som med Anker parameter, kan du la Unity automatisk sette avstanden til leddet ved å aktivere Automatisk konfigurasjonsavstand felt. Når dette alternativet er på, registrerer Unity automatisk avstanden mellom de to objektene og setter den som en avstand som fugen holder mellom dem. I vårt spesifikke tilfelle ønsker vi denne funksjonen på.

De Avstand parameter, som navnet antyder, angir avstanden for å opprettholde mellom begge objektene. Tilbake i scene se, du kan se en liten grønn linje som krysser linjen som forbinder de to objektene. Dette kan lett ses hvis du flytter AxeBlade-objektet fra Plattform, som i bildet nedenfor.

Denne linjen indikerer avstanden håndhevet av skjøten. Når du kjører scenen, beveger leddet seg AxeBlade slik at Anker du definert er på det punktet hvor den lille linjen er. Du kan øke eller redusere denne verdien ved å snu Auto Konfigurer Joint av. Husk å stille inn AxeBlade posisjon tilbake til (-0,11, 3,56, 0) når du har spilt med sine verdier. Auto Configure Distance bør også kontrolleres.

Den neste parameteren er Kun maks. Avstand. Hvis aktivert, vil leddet kun håndheve en maksimal avstand, noe som betyr at objektene kan komme nærmere hverandre, men aldri lenger unna enn verdien som er angitt i Avstand felt. I dette eksemplet vil du ha avstanden som skal løses, så la denne parameteren være avkrysset.

Endelig er den siste parameteren Break Force. Her kan du angi kraftnivået du vil bruke for å bryte leddet. I utgangspunktet, hvis kraftnivået er nådd, vil leddet bli slettet og forbindelsen mellom de to objektene vil forsvinne. Når verdien er satt til Infinity, betyr det at leddet er ubrutt. For dette scenariet vil du at det skal være ubrutt, så forlat feltet som det er.

Siden du vil at bladet skal svinge som en pendel, endrer du det rotasjon til (0, 0, 310).

Trykk nå Spille, og du vil se AxeBlade henger på Plattform.

Ok, så bladet svinger, men når det treffer spilleren, skjer ingenting. Du vil drepe spilleren og gjøre det på nytt på det siste kontrollpunktet. For å gjøre dette, gå til GameAssets mappe og åpne scripts mappe. Ta tak i Blad skript og legg det til AxeBlade. Hvis du trykker på Spille igjen, spilleren skal nå dø når bladet rammer.

Den endelige konfigurasjonen er følgende:


For å fullføre, ta tak i Blad GameObject fra hierarki og slipp det i hindringer mappe. Dette vil skape en prefab av svingbladet.

Hengsel felles 2D

De Hengsel felles 2D komponent gjør at et GameObject kontrollert av stiv kroppsfysikk skal festes til et punkt i rommet rundt hvilket det kan rotere. Rotasjonen kan skje som svar på en kollisjon eller startes av et motormoment som tilveiebringes av skjøten selv. Du kan og bør sette grenser for å forhindre at hengslene får full rotasjon.

For å lære det grunnleggende i hengselleddet, vil du opprette en dual trapdoor mekanisme der spilleren må slippe for å fortsette nivået. La oss gjøre det!

Legg til en ny tom GameObject, gi den navnet Hengsel, og plasser den i Stilling (18,92, 0, 0). Deretter åpner du Assets \ Free Assets \ Sprites og dra to MetalPlatform sprites inn i Hengsel GameObject. Navn den første HingePlat1 og den andre HingePlat2.

Plasser dem side ved side; de HingePlat1 bør plasseres på Stilling (0, 0, 0) og HingePlat2 på (2,5, 0, 0). Endre Bestille i lag av begge til 2.

For å legge til Hengsel felles 2D komponent, må du legge til to ekstra komponenter til sprites. Velg HingePlat1 og legg til en Box Collider 2D og a Rigidbody 2D. Under Rigidbody 2D parameter, kontroller Er kinematisk eiendom. Gjenta nå de samme trinnene for HingePlat2 (uten å kontrollere Is-kinematisk eiendom).

Du kan også merke at Størrelse av Box Collider 2D er større enn HingePlat1 sprite, noe som fører til feil kollisjonsdetektering mellom spilleren og plattformen. For å fikse problemet, endre eiendommen Størrelse (innsiden Box Collider 2D) av begge HingePlat1 og HingePlat2 til (2,45, 0,5).

Dette HingePlat2 vil være den første felle døren. Derfor må du tilordne en ny komponent som heter Hengsel felles 2D. Denne komponenten har flere nye egenskaper; Vi vil bare dekke de nye.

Aktiver kollisjon betyr at de to tilkoblede objektene kan kollidere mellom dem. Koblet stiv kropp angir hvor det andre objektet er at denne leddet kobles til. Legg til HingePlat1 til dette feltet. Bruk motor angir om hengselmotoren skal være aktivert. Du bør sjekke denne eiendommen. Motorhastighet angir målmotorhastigheten i grader / sek. Sett den til -100 (for å gå tilbake til den opprinnelige posisjonen fra den oppadgående posisjonen).

Maksimal motorkraft representerer det maksimale dreiemomentet (eller rotasjonen) motoren kan gjelde under forsøk på å nå måleturtallet. Du bør sette den til 25Bruk grenser, som navnet antyder representerer dreievinkelgrenseverdien. Sjekk det!

Nedre vinkel er den nedre enden av rotasjonsbuen tillatt av grensen, mens Øvre vinkel er den øvre enden av rotasjonsbuen tillatt av grensen. Endre Øvre vinkel til 60. Bryt dreiemoment den er lik Break Force og angir rotasjonsnivået som trengs for å bryte og slette leddet. Igjen betyr uendelig at det er ubrutt.

Fjern avmerkingen for Automatisk Konfigurere tilkobling. Du må sette Anker og Tilkoblet anker manuelt. Den tidligere skal settes til (-1.12,0), og sistnevnte til (1.09,0). Din scene skal nå se ut som følgende bilde:


Finalen HingePlat2 konfigurasjonen er:

Kjør spillet ditt, og la oss teste den første felle døren.

Hvis alt er greit, er det nå på tide å gå videre og lage den andre felle døren. Fremgangsmåten er nøyaktig lik den nevnte beskrivelse; Den eneste forskjellen ligger i konfigurasjonsdetaljer for Hengsel felles 2D. Hovedtrinnene er:

  1. Legg til to ekstra MetalPlatform sprites til Hengsel GameObject.
  2. Gi dem navn HingePlat3 og HingePlat4, og sett Bestille i lag til 2 og Stilling til (4,87, 0, 0) og (7,25, 0, 0) henholdsvis.
  3. Legg til en RigidBody 2D og a Box Collider 2D til begge plattformene.
  4. Endre Størrelse av begge Box Collider 2D til (2.45,0.5).
  5. HingePlat4 burde Er kinematisk aktivert.
  6. Legg til Hengsel felles 2D eiendom til HingePlat3.
  7. Legg til HingePlat4 inn i det Koblet stiv kropp av HingePlat3.
  8. Fjern merket for Automatisk Konfigurere tilkobling.
  9. Endre Anker til (1,5, 0) og Tilkoblet anker til (-1, 0).
  10. Undersøk Bruk motor eiendom og sett Motorhastighet til 100 og Maksimal motorkraft til 25.
  11. Undersøk Bruk grenser, og Øvre vinkel bør være -60.

Kjør spillet ditt, og la oss teste den doble felle døren.

Siden vi vil tvinge spilleren til å passere gjennom den dobbelte felle døren, må vi lage noen vegger rundt den. Velg Hengsel GameObject og fra Assets \ Free Assets \ Sprites mappen legger til seks MetalPlatform inn i det Hengsel GameObject. Navn dem fra wall1 til Wall4 og endre Bestille i lag til 2.

Plasser wall1 i Stilling (-0,9, -1,43, 0) og endre Z Rotasjon til 90. De resterende skal konfigureres som følger:

  • Wall2 posisjon: (-0,9, -3,8, 0), Z Rotasjon: 90 

  • Wall3 posisjon: (8,2, 1,55, 0), Z Rotasjon: 90

  • Wall4 posisjon: (8,2, 3,95, 0), Z Rotasjon: 90

Nå, for hver vegg bør du legge til en ekstra komponent, a Box Collider 2D. For hver Box Collider 2D endre Størrelse til (2,21, 0,63). Legg deretter til en Plattform Effector 2D til hver vegg og sett Overflatebue til 360 og Sidebuen til 180. Gå tilbake til Box Collider 2D og slå Brukt av Effector på.

Det endelige resultatet skal lignes på:

Til slutt drar du Hengsel GameObject inn i GameAssets \ Hindringer mappe for å lage din andre prefab.

Target Joint 2D

Target Joint 2D kobles til et bestemt mål, i stedet for et annet stivt kroppsobjekt, som andre ledd normalt gjør. Vi vil bruke dette felles for å skape en hindringsplattform som beveger seg oppover og nedover.

Det første du må gjøre er å skape plattformen selv. På Gratis eiendeler / Sprites mappe, der finner du MetalPlatform sprite. Dra den og legg den på scenen.

Bytt navn til RisingPlatform og dets Stilling til (35, -6, 0), og sett inn Bestille i lag til 2. Du trenger noen komponenter for å gjøre dette arbeidet. Legg til en Rigidbody 2D og a Box Collider 2D. Sett deretter inn Masse til 20 og sjekk Fryse posisjon X og Fryse Rotasjon Z. På Box Collider 2D, sørg for at Størrelse er satt til (2,35, 0,55). Endelig sett inn Gravity Scale til 0 slik at objektet ikke påvirkes av tyngdekraften.

De grunnleggende komponentene er nå klare. Det er nå tid for deg å legge til Target Joint 2D komponent. Som nevnt er det Target Joint 2D Kobler ikke til et annet objekt med en stiv kropp; I stedet kobles det til et bestemt mål. Dette er en fjærtype felles og kan brukes til å plukke opp og flytte objekter som virker under tyngdekraft, som vår bevegelige plattform.

La oss ta en nærmere titt på selve komponenten. De Anker fungerer akkurat som i forrige ledd, så det er ikke nødvendig å forklare det. De Mål setter verdenskoordinatene mot hvilken fugen forsøker å bevege seg. Dette er et veldig viktig felt, siden dette felles vil forsøke å holde null lineær avstand mellom Anker og Mål punkter. For dette eksempelet vil du ha Mål å være (35, -6).

Deretter har du Automatisk konfigurering av mål. Hvis denne egenskapen er aktivert, vil fugen beregne målet selv. Hvis du lar dette alternativet gå, endres målet når plattformen beveger seg. Siden du ikke vil at det skal skje, la denne boksen være ukontrollert (fjern markeringen Automatisk konfigurering av mål).

Følgende er Max Force; Her setter du kraften som leddet kan gjelde når du prøver å nå målet. Angi denne verdien til 80.

De Dampforhold er graden som du vil undertrykke vårens svingning på. Denne verdien kan gå fra 0 til 1, der 1 betyr ingen bevegelse. Du vil at plattformen skal bevege seg fritt, så sett dette feltet til 0. Deretter har du Frekvens som, som navnet antyder, angir frekvensen hvor fjæren svinger mens du prøver å nå målet. Sett denne parameteren til 5.

Endelig er den siste Break Force, som er identisk med forrige ledd, så la verdien forbli som standard. 

Siden du vil at plattformen din skal fortsette å bevege deg over tid, må du endre Mål posisjon fra tid til annen. Heldigvis har du allerede skriptet til å håndtere det. Gå til scripts mappe, finn TracktorPlatform skript, og legg det til spillobjektet ditt. Sett Mål A til (35, -6) og Mål B til (35, 0). De Tid bør være 2.

På slutten bør komponenten se slik ut:

Hvis du trykker på Spille, Du bør kunne se den resulterende målgruppen som fungerer. Ikke glem å lage en prefab, som du gjorde med de forrige hindringene, og plasser den i hindringer mappe.

Fast felles 2D

Den faste felles 2D brukes til å holde to gjenstander kontrollert av stiv kroppsfysikk i forhold til hverandre. Derfor er begge objektene alltid kompensert i en gitt posisjon og vinkel.

For å bruke denne skjøten, vil du opprette en metallplattform som bare kan flyttes når spilleren beveger seg en magnet som er festet til den. Spilleren må trykke på magneten for å fjerne plattformen fra vei og deretter gå videre på nivået.

Begynn med å opprette en tom GameObject, gi den navnet MagnetPlatform, og sett dens Stilling til (41,81, 5,22, 0). Deretter ta tak i Magnet sprite fra sprites mappe og slipp den over MagnetPlatform. Sett Magnet Stilling til (0,55, 3,15, 0) og Bestille i lag til 3.

Deretter legger du til en Rigidbody 2D komponent og a Circle Collider 2D. Sett Masse til 200 og slå Fryse Rotasjon Z på. Pass på at RadiusCircle Collider er satt til 0.4. Til slutt, din Magnet bør se slik ut:


Nå, fra sprites mappe, dra MetalPlatform sprite inn i MagnetPlatform GameObject. Sett Stilling av MetalPlatform til (0,57, -1,73, 0), den rotasjon til (0, 0, 90), og Scale til (2, 1, 1). Sett Bestille i lag til 3.

Deretter legger du til følgende komponenter: Rigidbody 2D, og a Box Collider 2D. På Rigidbody 2D, sett Masse til 1000 og aktiver Fryse Rotasjon Z. Til slutt, på BoxCollider 2D, sett Størrelse til (2,31, 0,52).

Nå som alt er klart, er det på tide å konfigurere Fast Joint 2D og etablere forbindelsen mellom magneten og metallplattformen. Med MetalPlatform valgt, legg til FastJoint 2D komponent.

Denne nye leddet tillater to spillobjekter med en stiv kropp for å opprettholde en relativ lineær og vinkelforskyvning mot hverandre. I dette tilfellet vil du ha metallplattformen for å holde en viss avstand fra magneten.

Disse lineære og kantede forskyvningene settes på de relative posisjonene og orienteringene til de to tilkoblede spillobjektene. Dette betyr at når du endrer posisjonen til et av objektene i Scenevisning, Du vil også oppdatere offsets.

Denne skjøten bruker en simulert fjær som er konfigurert til å være så stiv som mulig. Det er imidlertid mulig å endre vårens styrke og gjøre den svakere. Denne simulerte våren bruker sin kraft mellom objektene, og det er ansvarlig for å holde motstandene du ønsker.

Hvis du ser på komponenten selv, finner du flere felt som du allerede er kjent med.

Med unntak av to av disse feltene fungerer alle parametere akkurat som på de andre leddene, så det er ikke nødvendig å forklare dem igjen. Angående Dampforhold, Denne parameteren representerer graden som du vil undertrykke vårens svingning på. Du kan angi verdier fra 0 til 1, der 1 betyr ingen bevegelse.

De Frekvens er frekvensen hvor fjæren svinger mens de to tilkoblede objektene nærmer seg separasjonsavstanden. Denne parameteren kan ta verdier fra 1 til 1000000. Jo høyere verdien desto stivere blir våren.

Vær oppmerksom på at selv om høyere verdier betyr en stivere vår, hvis du setter inn Frekvens til 0, vil våren være helt stiv.

Nå, når det gjelder hindringen du prøver å bygge, er alt du trenger å gjøre, å dra Magnet spillobjekt til Koblet stiv kropp felt. Alle de andre parameterne kan etterlates med standardverdiene.

trykk Spille og test det nye hinderet.

Nå som hinderet er klart, må du lage en prefab av det ved å dra GameObject til hindringer mappe.

Konklusjon

Dette avslutter den første opplæringen om Unity Joints 2D. Du lærte om fire ledd, nemlig avstand, hengsel, mål og faste ledd. Med denne kunnskapen kan du allerede begynne å lage 2D-verdenene dine fylt med dynamiske og komplekse objekter. I den andre opplæringen lærer du om glidebryteren, relativ, vår og friksjonsleddene.

Hvis du har spørsmål eller kommentarer, kan du som alltid gjerne slippe en linje i kommentarene.