Developedia
Developedia
Joint-ok

Joint-ok

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.

A Sárga elemek Fixed Joint-tal vannak összekapcsolva és véges, törési erővel

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.

A kék és sárga láncszemek Spring Joint-tal vannak egybe kapcsolva. A sárga elem szakadási ereje alacsonyabb a többinél: a “leggyengébb láncszem”.

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.

Hinge Joint beállítása
Hinge Joint beállítása
A piros ajtók mindegyike egy-egy Hinge Joint-tal van rögzítve

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.

Character Joint beállítása
Character Joint beállítása

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.

Ragdoll robotok hullanak

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)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.

Szabadsági fokok 3D térben
Szabadsági fokok 3D térben

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.

Logo

Főoldal

Blog

Elmélet

3D Studio

Adatvédelmi nyilatkozat

GY.I.K.

Házirend

Szerző: Marosi Csaba / marosi.csaba@3d-studio.hu

DiscordGitHubLinkedIn