Sockety
Připravte připojovací body v Blenderu a použijte je pro spojování těles ve hře.
Co jsou sockety?#
Socket označuje místo, ke kterému se může připojit jiné těleso. Určuje polohu i natočení, takže dokovací systém ví, kde a jak se mají dvě části potkat. Hodí se například pro uchycení nákladu, odnímatelnou součást nebo několik připojovacích bodů na paletě.
V Blenderu připravíte připojovací body. V GameMakeru z nich vytvoříte sockety na fyzikálních tělesech a nastavíte, které dvojice se mohou spojovat. Socket není kolizní tvar a jeho přidání v Blenderu samo o sobě žádná tělesa nespojí.
Vytvoření v Blenderu#
Vyberte JoltPhysics Root a zvolte Add → JoltPhysics → Helpers → Socket. Nastavte Key, například dock_front. Přesně tento klíč, včetně velikosti písmen, použijete k vyhledání socketu v GameMakeru. Display Name slouží jako volitelný popisný název.
Pozice a natočení#
Socket posuňte na požadované místo připojení a jeho otočením určete orientaci spoje. Root ponechte v počátku, bez otočení a s měřítkem 1. Pracujte v metrech.
Do jedné konfigurace můžete přidat více socketů. Každému dejte odlišný Key a jeho umístění upravte samostatně. Ve hře budou jejich pozice následovat pohyb a otáčení vlastnícího tělesa.
Export a načtení#
Spusťte Validate a konfiguraci exportujte přes Export Jolt JSON. Soubor přidejte do Included Files v GameMakeru, načtěte jej a vytvořte vlastnící těleso. Pokud těleso vytváříte z tohoto assetu, musí asset obsahovat také kolizní tvary.
Vytvoření socketu v GameMakeru#
Následující kód vložte do Create až po spuštění fyzikálního světa a vytvoření vlastnícího tělesa. Proměnná asset zde obsahuje načtená data assetu a body_vehicle je existující platné těleso. Nahraďte je svými proměnnými. Klíč dock_front musí existovat v exportovaném assetu.
dock_front = jolt_asset_create_socket(
asset, "dock_front", body_vehicle, "male", "cargo_dock");
if (is_undefined(dock_front)) {
show_debug_message(jolt_get_error().message);
}Kompatibilita a spojování socketů#
Parametr polarity má hodnotu male nebo female. Odpovídající dvojice používá opačné polarity a stejný compatibility_type, například cargo_dock. Tímto neprázdným názvem rozlišujete různé druhy spojů ve své hře.
Protikus vytvořte na jiném tělese z jeho vlastního exportovaného socketu. Vytvoření obou socketů je okamžitě nespojí: dokování závisí také na pravidlech zachycení, vzdálenosti a orientaci. Toto chování nastavíte přes dokovací API socketů.
Úklid#
V Clean Up uvolněte úspěšně vytvořený socket před zrušením jeho tělesa nebo ukončením fyzikálního světa:
if (!is_undefined(dock_front)) {
dock_front.destroy();
dock_front = undefined;
}Technická reference#
Syntax#
jolt_asset_get_socket(asset, socket_ref);
jolt_asset_create_socket(asset, socket_ref, body, polarity, compatibility_type, [options]);Factory funkce při chybě vracejí undefined; ihned přečtěte jolt_get_error(). Lookup vrací samostatnou validovanou kopii záznamu. Reference je kanonické UUID nebo přesný Key rozlišující velikost písmen. Vlastník musí být živé spravované těleso aktuálního světa.
Světová transformace = aktuální transformace originu Body × lokální transformace z assetu. Těžiště není autorovací počátek. Pozice používají metry a rotace normalizované XYZW quaterniony. Při pohybu tělesa snímky znovu načítejte.
JSON socket dodává polohu a rotaci. Polarita, compatibility type, pravidla zachycení a herní stav patří runtime konfiguraci. options nesmí přepsat position ani rotation. Vytvoření socketu nevytváří těleso ani jej automaticky nepřipojuje; dále používejte stávající dokovací API.
| API / pole | Význam a pravidla |
|---|---|
| jolt_asset_get_socket | Validovaný běžný záznam nebo undefined; bez nativní alokace. |
| jolt_asset_create_socket | JoltSocket nebo undefined. Platí běžná životnost socketů a pravidla dokování. |
| authoring_id / authoring_key / authoring_name / authoring_configuration_id | Metadata původu socketu; odlišná od runtime Socket.id. |
Ověřené kontrakty operací#
Následující kontrakty rozlišují jednotky, návratové hodnoty, chyby a životnost podle aktuální implementace. Nevynechávej kontrolu výsledku: false, 0 a undefined mohou mít u různých metod odlišný význam.
| Symbol / vlastník | Signatura | Kontrakt operace |
|---|---|---|
| jolt_asset_create_socket | jolt_asset_create_socket(asset, socket_ref, body, polarity, compatibility_type, options=undefined) | Asset key/UUID + živý Body + male/female + compatibility_type + runtime options. Vrací JoltSocket/undefined; transform pochází z assetu, options.position/rotation jsou chyba. Authoring ID není runtime Socket.id. |
| jolt_asset_get_socket | jolt_asset_get_socket(asset, socket_ref) | Asset + přesný key nebo kanonické UUID. Znovu validuje mutable asset a vrací nezávislý datový záznam, nikoliv fyzikální objekt; chyba undefined a managed error. |

