A Joint-ok komponensek, amiknek az a feladata, hogy hozzákapcsoljanak egy Rigidbody-t egy a másikhoz, és valami módon korlátozzák vagy befolyásolják azok mozgását azáltal, hogy automatikusan erőket közölnek vele.
A Unity Joint-okat magyarra leginkább csuklónak vagy kötésnek lehetne fordítani.
Az alábbiakban csak a 3D joint-okat fogjuk átvenni, viszont 2D-ben az alábbi joint-ok mindegyikének létezik megfelelője, sőt még több is.
Fixed Joint
A Fixed Joint-ot arra tervezték, hogy két testet fixen rögzítsen egymáshoz úgy, hogy azok egyáltalán ne mozogjanak egymáshoz képest, vagy csak nagyon korlátozottan.
Spring Joint
A Spring Joint-tal két test távolságát adhatjuk meg egy tartományban. Ha ezen távolságon beljebb vagy kívül kerül a két test láthatatlan rugóként húzzák, taszítják egymást.
Hinge Joint
A Hinge Joint-ok egy tengely körül hagyják szabadon mozogni a testet. Ezen belül is korlátozhatjuk az engedélyezett minimum és maximum szögeket.
A Hinge joint ideális ajtók, ablakok, zsilipek, kerekek, turbinák rögzítésére: gyakorlatilag bármihez, ami a fizikai rendszert használva forog egy tengely körül.
Character Joint
A Character Joint kifejezetten (humanoid és nem humanoid) karakterek tagjainak rögzítésére szolgál. Egy hajlat több szabadsági fokon tud mozogni:
- Döntés y tengely mentént Pl.: Fej jobbra dönt
- Döntés x tengely mentén Pl.: bólogatás “igen”
- Forgás határok közt Pl.: Fej csóválása: “nem”
Az tengelyek nevei: x, y itt relatívan értendők az adott tag lokális koordinátarendszerében.
Ezen lehetséges tengelyeken tudjuk megadni egy csuklóelem minimum és maximum elfordulását, valamint, hogy ezen határértékek mennyire legyenek “kemény”-ek vagy “rugósak”.
A Character Joint leggyakrabban arra használatos, hogy egész testeket rakjunk össze, amik ezután rongybábúként hajlanak: Ragdoll.
Karakterek előre legyártott animációit és ragdoll (rongybabba) fizikai szimulációt gyakran használnak egy modellen, egymást kiegészítve.
Egy egész testet felszerelni fizikai komponensekkel összetett feladat: Rigidbody-k, Collider-ek és Character Joint-ok. Szerencsére van a Unit-ben beépített eszköz, ami valamelyest megkönnyíti a dolgunk:
Felső menüsáv / GameObject / 3D Object / Ragdoll.
A 3D karakter építésés minden részletével majd itt foglalkozunk: 3D Humanoid karakter felépítése (Hamarosan)
Configurable Joint
Mint azt láttuk, minden joint valami módon korlátozza és kényszeríti a mozgásban a Rigidbody-t egy másik Rigidbody egy bizonyos pontjához képest.
Hogy milyen lehetséges módon tud egy test mozogni, azt szabadsági fokoknak nevezzük. Ha ezent tengelyeken tud egy test mozogni, akkor ezek mentén lehet korlátozni is őket.
Összesen 6 darab szabadsági fok létezik a 3D térben: Három a mozgásra, három a forgásra, minden tengely mentén egy-egy.
A Configurable Joint-ban egyenként lehet megadni minden egyes szabadsági fokra a korlátozásokat. Ennek beállításai messze a legösszetettebbek az összes Joint közül.
Joint-ok beállításai
A Joint-ok megértéséhez igazából gyakorolni kell a használatukat. Ezért is itt most nem fogjuk egyenként megnézni az összes egyedi Joint összes beállítását, helyette átnézzük a legfontosabbakat, amik több különböző Joint típuson is előfordulhatnak.
Connected Body: Melyik Rigidbody-hoz kötjük a testet. Ha ez a kapcsolódó Rigidbody nem dinamikus, hanem kinematikus beállítású, akkor egy fix és mozdíthatatlan ponttal kötöttük össze a testet.
Anchor: A Joint-ot is tartalmazó GameObject melyik pontját kötjük a másikhoz? Ezt a testhez képest, lokális koordinátában kell megadni.
Connected Anchor: A kapcsolt Rigidbody mely pontjához kapcsolódjon a Joint? Megin csak lokális koordinátában beállítandó, ezúttal a kapcsolt testhez képest.
Break Force / Break Torque: Megadható egy minimális erő és forgatónyomaték, ami hatására “széttörik” a kötés. Ezen beállításoknak lehet végtelen magas értéket is megadni. Ehhez az “Infinity” szót kell beírni és általa a kötelék törhetetlen lesz.
Axis: Mely tengely mentén engedélyezett a forgás.
Limits: Egy adott szabadsági fokon beállíthatók a megengedett szélsőértékek
Spring: A határértéket egységnyi mértékkel túllépve mekkora erő hasson visszafelé irányba. Ha a táv- és tömegmérésre SI mértékeket használunk, akkor mértékegysége feltehetőleg N/m (, habár ezt a Unity dokumnetáció nem tisztázza egyértelműen).
Tolerance: A rugóerőhöz kötődő beállítás. Mennyivel nyúlhatunk túl a beállított limiteken, amíg még nem fejt ki ellenirányú erőt a Joint.
Damper: A rugóerőhöz kötődő beállítás. Mennyivel csillapodjon az a rugó erő egyégnyi idő alatt.
Motor: Folyamatos automatikus erő vagy forgatónyomaték közlés egy adott szabadsági fok mentén.