Pomocné skripty · Sockets
Lifecycle, debug a řešení problémů
Managed cleanup chrání sockety před stale body handly a debug renderer zobrazuje skutečný runtime stav bez zásahu do fyziky.
Socket si při vytvoření uloží world a generational body handle. Platnost nekontroluje pouze existenci GML structu, ale také živý parent, shodu handlu a aktuální managed world.
Bezpečné pořadí cleanupu#
- socket.destroy() nejprve rozpustí group, potom connection a nakonec vyřadí socket.
- connection.destroy() zničí constraint, obnoví pair collision, vyčistí endpointy a nastaví cooldown.
- group.destroy() rozpojí jednu connection a uvolní všechny přeživší sockety pro běžné použití.
- Zničení parent body automaticky uklidí jeho sockety a související groups/connections. Stale generational handle se nikdy znovu nepoužije pro native destroy.
- jolt_stop() odstraní socket registry společně s managed world resources.
Debug vizualizace#
Zapněte Socket debug prostřednictvím běžného debug systému a příznaku JOLT_DEBUG_SOCKETS. Každý socket kreslí marker a lokální osy X červeně, Y zeleně a Z modře. Barva markeru rozlišuje disabled, volný, candidate a connected stav.
| Group debug | Barva |
|---|---|
| Pár zarovnaný / group connected | Zelená |
| Pár způsobilý a v dosahu / group active | Oranžová |
| Group připravena k capture | Azurová |
| Pár nebo group neaktivní | Červená |
Point constraint debug čte aktuální world attachment body z nativního constraintu každý frame. Marker proto sleduje pohyb i rotaci celé soustavy a není uloženou creation-time pozicí.
Časté problémy#
| Projev | Co ověřit |
|---|---|
| Žádný candidate | Type, polarity, enabled, cooldown, search_distance, stejný world a různá bodies. |
| Candidate existuje, ale nelockne | Position/rotation chybu, relativní rychlosti, force/torque limit a překážky. |
| Hinge nebo Point se nehýbe | Překryv colliderů; pro daný pár zkuste collision:false. |
| Group ukazuje jen 1/2 | Kompatibilitu, enabled stav a local frame druhého explicitního páru. |
| Connection ihned praskne | Jednotky max_force/max_torque, reálné reaction zatížení a zda startovní collidery nejsou v silné penetraci. |
| Po disconnectu se hned nespojí | Jde o zamýšlený cooldown; sledujte blocked_until nepřímo uplynutím času. |
Kontrolní seznam před nasazením#
- Ověřte socket osy na rotovaném parent body, nejen na identity transformu.
- Vyzkoušejte lehký i nejtěžší očekávaný male s konečnými attraction limity.
- U pohyblivého hostitele ověřte lock a následný pohyb výsledného constraintu.
- Otestujte disconnect, cooldown, reconnect, zničení obou parent bodies a jolt_stop().
- U breakable spojení změřte běžné provozní reakce a limit nastavte s rezervou nad nimi.