Unity 2D Joints Slider, Relativ, Fjäder och Friktionskopplingar

Vad du ska skapa

I den tidigare handledningen började vi titta på hur 2D fysikskarv fungerar i Unity och hur man använder dem för att uppnå stora effekter (utan att offra spelprestanda). I den handledningen täckte vi avståndet, gångjärnet, målet och de fasta lederna.

Idag fortsätter vi med att titta på reglaget, släktet, våren och friktionen.

Slider Joint

Den här leden tillåter ett spelobjekt som styrs av styv kroppsfysik att glida längs en linje i rymden. Objektet kan flyttas överallt längs linjen som svar på kollisioner, krafter eller motorkraft. Därför kommer ditt nästa hinder att vara en rörlig plattform som kontinuerligt rör sig mellan två fasta punkter.

Skapa ett nytt tomt GameObject, ring det MovingPlatform, och ställa in Placera av föremålet till (72,36, 1,57, 0). Därefter måste du skapa tre olika plattformar. Gå till plattformsmappen och dra tre sprites PLATFORM1Platform6, och Platform12 in i MovingPlatform.

Positionen av PLATFORM1 bör vara (0, -1, 0), medan för Platform6 det är (14, -1, 0) och för Platform12 (20,3, -1,0). Efter att du har placerat spritesna bör ditt scenario se ut så här:

Nu när du har alla tillgångar på plats, är det dags att skapa och konfigurera Slider Joint 2D. Välj Platform6 och lägg till en Slider Joint 2D komponent till den. Enhet lägger automatiskt till en RigidBody 2D också. Gör det möjligt Frys Rotation Z också. Välj nu PLATFORM1 och lägg till en RigidBody 2D. Aktivera alternativen Är kinematisk och Frys Rotation Z.

Välj nu Platform6, ta bort Plattformeffekt 2D komponent och inaktivera alternativet Används av EffectorBox Collider 2D komponent.

Fälten tillgängliga i Slider Joint 2D komponent liknar dem du såg i Gångjärn gemensamma, men med några semantiska förändringar. Eftersom slidkopplingar handlar om linjär snarare än vinkelrörelse, Motorhastighet mäts i enheter per sekund. På samma sätt kan du istället för vinkelgränser ange översättningsgränser. Översättningsgränser arbeta på samma sätt som vinkelgränser, förutom att de anger det avstånd den styva kroppen kan vara från Anslutet ankare punkt.

Sväng Aktivera kollision på, eftersom du vill att plattformen ska kollidera med de anslutna plattformarna. Drag PLATFORM1 till Ansluten styv kropp. Ställ in Anslutet ankare till (-0,082, -0,0646). Gör det möjligt Använd motor och ställa in Motorhastighet till -2.

Om du trycker på Spela, Du kommer att se att mittenplattformen nu rör sig. Men när den nått närmaste plattform stoppar den. För att åtgärda detta måste du lägga till MovingPlatform skript till Platform6. Drag Platform12 till Plattform A och PLATFORM1 till fältet Plattform B.


Tryck Spela, och verifiera att allt fungerar som förväntat. Nu när hindret är klart, skapa en prefab av det och placera det i hinder mapp.

Relativ Joint

Relativ Joint 2D tillåter två spelobjekt som styrs av fysisk fysisk fysik för att upprätthålla en position baserad på varandras plats. För att genomföra denna gemensamma skapar du två plattformar. En är fixerad i rymden, medan den andra kommer att flytta runt den, vilket skapar ett cirkulärt hinder.

Skapa en ny tom GameObject på Placera (102,7, 4,2, 0) och namnge det Släkting. Inuti Tillgångar \ GameAssets \ Platforms mapp, dra Platform11 in i Släkting GameObject och byt namn till Platform2. Ändra dess Placera till (-.45, -5,97, 0) och den Skala till (.5, .5, 1). Lägg till en Rigidbody 2D komponent och kontrollera Är kinematisk fast egendom. Den första delen av hinderet är skapad, så låt oss fortsätta och lägga till den andra plattformen.

Lägg till MetalPlatform sprite (inuti Gratis tillgångar \ Sprites mapp) i Släkting GameObject, namnge det Plattform, ändra Beställa i lager till 2, och ställa in Placera till (-.37, 1,23, 0). Lägg till två komponenter: a Rigidbody 2D och a Box Collider 2D. Ändra Storlek av Boxkollider 2D till (2,32, 0,55).

Lägg nu till en Relativ gemensam 2D komponent till Plattform. Inuti Ansluten styv kropp du borde placera Platform2.

De Max Force egenskapen sätter den linjära (raka linjens) offset mellan förenade objekt-ett högt värde (upp till 1000) använder hög kraft för att upprätthålla förskjutningen. De Max vridmoment ställer vinkelrörelsen (rotation) mellan förbundna objekt. Ange båda värdena till 200. De Automatisk Konfigurera förskjutning bör kontrolleras.

Om du kör ditt spel kommer du att se att ingenting rör sig. Du måste göra ett sista steg som innebär att du lägger till RelativeJoint (inuti skript mapp) skript i Plattform GameObject. Spela spelet och test om allt fungerar som avsett.

Den slutliga gemensamma konfigurationen är:

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

Vår gemensamma

Vårens gemensamma 2D-komponent gör det möjligt att fästa två spelobjekt som styrs av styv kroppsfysik tillsammans som en fjäder. Våren kommer att applicera en specifik kraft längs sin axel mellan de två objekten, försöka hålla dem ett visst avstånd från varandra.

För att använda denna gemensamma skapar du en flytande bro som består av moln; molnen kommer att fästas till ett annat stort moln med hjälp av vårföreningen.

Börja med att skapa en tom GameObject. Namnge det Vår och sätt dess Placera till (120, 10, 0). Lägg till Walkaway1 sprite (inuti Plattform mapp) i Vår GameObject. Byt namn till CloudSpring och den Beställa i lager till 1. Lägg till en Rigidbody 2D och kolla på Är kinematisk fast egendom.

Nu lägger vi till fyra nya sprites. Välj Platform9 sprite från samma mapp och lägg till fyra av dem i Vår GameObject. Namn varje objekt PlatSpring01 till PlatSpring04.

Varje PlatSpring måste placeras i rätt position enligt följande:

  • PlatSpring01: -7,63, -12,35, 0

  • PlatSpring02: -2,67, -11,16, 0

  • PlatSpring03: 1,88, -12,44, 0

  • PlatSpring04: 6,77, -12,58, 0

Ändra Beställa i lager till 4 för alla PlatSpring objekt. Nu, för varje PlatSpring du måste lägga till två komponenter: a Rigidbody 2D och en Vår gemensamma 2D. För Rigidbody 2D komponenter, du behöver bara kolla Frys RotationZ axel.

När du lägger till Vår gemensamma 2D, det skapar som standard a Ansluten styv kropp till Scen Centrum.

Det är inte den avsedda effekten. Därför bör du bifoga CloudSpring GameObject till Ansluten styv kropp av varje PlatSpring.

När du gör det uppdateras den gröna linjekopplingen automatiskt och placeras inuti CloudSpring.

Du kan ändra Anslutet ankare och den Distans om du vill. Men i denna handledning kommer du bara att ändra Anslutet ankare.

För varje PlatSpring, ändra Anslutet ankare följaktligen:

  • PlatSpring01-4,8, 0

  • PlatSpring02: -1,7, 0

  • PlatSpring031,07, -0,11

  • PlatSpring04: 4,13, -0,11

Den fullständiga konfigurationen av PlatSpring01 är följande:

Spela ditt spel och testa om allt är välplacerat och konfigurerat. Nu när hindret är klart, skapa en prefab av det genom att placera GameObject i hinder mapp.

Friktionsfog

Friktionsförekomsten 2D förbinder objekt som styrs av styv kroppsfysik och reducerar både linjära och vinkelhastigheter mellan föremålen tills de når noll (dvs det saktar dem ner). För att implementera Friction Joint 2D skapar du en rörlig plattform som är kopplad till ett moln med fysiska egenskaper.

Börja med att skapa en tom GameObject. Namnge det FrictionPlatform och sätt dess Placera till (133, 5, 0). Lägg till Platform11 sprite (inuti Tillgångar \ älvor mapp) i FrictionPlatform. Byt namn till Stöd och ställa in Beställ i Layer till 1, dess Placera till (0, 0, 0) och dess Skala till (.25, .25, 1). Du bör också lägga till en Rigidbody 2D och kolla på Är kinematisk fast egendom. De återstående egenskaperna ska lämnas till standardvärdena.

Lägg nu till MetalPlatform sprite in the FrictionPlatform. Ändra dess Placera till (.31, -8,33, 0), och den Beställa i lager till 3. Med MetalPlatform välj, lägg till en Rigidbody 2D, en Box Collider 2D, och a Plattform Effector 2D. De Box Collider 2D Storlek bör anpassas till (2,35, 0,5) med Används av Effector på, medan i Rigidbody 2D du måste kontrollera Frysta position Y och den Frys Rotation Z. Du borde nu ha något som följande:

Om du spelar spelet och hoppa över MetalPlatform, du kommer märka att ingenting rör sig. Låt oss ändra det genom att lägga till en Friktionsfog 2D in i MetalPlatform. De Ansluten styv kropp bör fyllas av Stöd. För denna gemensamma kommer vi att låta Unity ange det bästa ankarkoordinatet genom att möjliggöra Konfigurera automatiskt ansluten. De Max Force och Max vridmoment borde vara 1, medan Break Force och Brytvridmoment borde vara Oändlighet.

Kör ditt spel och låt oss testa friktionsledet. Nu när det sista hindret är klart, skapa en prefab av det och placera det i hinder mapp.

Slutsatser

Detta avslutar den andra handledningen om Unity Joints 2D. Du lärde dig om fyra leder, nämligen glider, relativa, fjäder- och friktionsfogar. Med denna kunskap allierad med allt du lärde dig i första delen, kan du nu skapa komplexa 2D-spel med komplexa 2D-fysikegenskaper. 

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