Blender a integrace

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.

Jeden socket umístěný v počátku JoltPhysics Root v Blenderu.
Samostatný socket v JoltPhysics Root.
Paleta sestavená z kolizních boxů se čtyřmi sockety v Blenderu.
Paleta z kolizních boxů se čtyřmi sockety.

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.

GML
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:

GML
if (!is_undefined(dock_front)) {
    dock_front.destroy();
    dock_front = undefined;
}

Technická reference#

Syntax#

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 / poleVýznam a pravidla
jolt_asset_get_socketValidovaný běžný záznam nebo undefined; bez nativní alokace.
jolt_asset_create_socketJoltSocket nebo undefined. Platí běžná životnost socketů a pravidla dokování.
authoring_id / authoring_key / authoring_name / authoring_configuration_idMetadata 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íkSignaturaKontrakt operace
jolt_asset_create_socketjolt_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_socketjolt_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.