Blender a integrace

Začínáme

Nainstalujte editor, připravte první kolizi v Blenderu a použijte ji v GameMakeru.

Instalace#

Použijte Blender 2.79b. Otevřete File → User Preferences → Add-ons, klikněte na Install from File a vyberte ZIP archiv s pluginem.

V seznamu doplňků vyhledejte JoltPhysics Asset Editor, zaškrtněte jej a klikněte na Save User Settings.

Blender User Preferences, Add-ons: zaškrtnutý Physics: JoltPhysics Asset Editor.
Zapnutý JoltPhysics Asset Editor v nastavení Blenderu.

Zavřete User Preferences. Ve 3D View otevřete View → Tool Shelf a vyberte záložku JoltPhysics.

Vytvoření konfigurace#

Ve 3D View zvolte Add → JoltPhysics → Configuration Root. Vytvořený JoltPhysics Root sdružuje kolizní tvary a pomocné prvky jednoho assetu.

Root ponechte na pozici 0, 0, 0, bez otočení a s měřítkem 1. Pracujte v metrech: jedna jednotka Blenderu představuje jeden metr.

Nabídka Shift+A v Blenderu: JoltPhysics, Configuration Root a skupiny Collision, Controls a Helpers.
Nabídka JoltPhysics otevřená pomocí Shift+A.

Přidání kolizních tvarů#

Vyberte JoltPhysics Root a zvolte Add → JoltPhysics → Collision → Box. Upravte pozici, otočení a rozměry boxu tak, aby vymezoval požadovanou kolizi.

Pro složitější objekt přidejte do stejné konfigurace další kolizní tvary a upravte je jednotlivě. Tyto tvary určují fyzikální geometrii; viditelný model se řeší samostatně.

Vybraný JoltPhysics Root v počátku scény Blenderu, zatím bez kolizních tvarů.
1. Samotný JoltPhysics Root.
JoltPhysics Root a oranžově vybraný kolizní box posunutý nad Root.
2. JoltPhysics Root s přidaným kolizním boxem.

Vyberte kolizní tvar a upravte jeho vlastnosti v panelu JoltPhysics. V části Transform mění Position polohu v osách X, Y a Z a Rotation jeho natočení. U Collision Box nastavíte celé rozměry pomocí Size (full) v části Shape. Každý tvar upravujte samostatně podle objektu; samotný Root ponechte beze změny.

Animovaná ukázka úpravy polohy, otočení a rozměrů Collision Box v panelu JoltPhysics a ve 3D pohledu Blenderu.
Úprava polohy, otočení a rozměrů kolizního boxu.

Viditelnost#

V panelu Authoring Visibility odškrtněte skupiny, které vám při práci překážejí, a opětovným zaškrtnutím je zobrazte. Skryté prvky zůstávají součástí assetu a nadále se exportují.

Animovaná ukázka panelu Authoring Visibility: přepínání políček skrývá a zobrazuje jednotlivé skupiny prvků ve 3D pohledu.
Skrývání a zobrazování prvků pomocí Authoring Visibility.

Pomocí Hide All nebo Show All skryjete či zobrazíte všechny pomocné prvky editoru. Solo Selected Type zobrazí pouze vybraný typ. Uložením souboru .blend zachováte nastavení pro další práci.

Export assetu#

Vyberte konfiguraci, kterou chcete exportovat, a v panelu JoltPhysics spusťte Validate. Projděte nahlášené problémy a před exportem odstraňte chyby.

Zvolte Export Jolt JSON a pro následující ukázku uložte soubor jako asset_house.jolt.json. Tato ukázka vyžaduje alespoň jeden kolizní tvar. Soubor .blend si ponechte jako upravitelný zdroj.

Panel JoltPhysics se stavem Configuration valid, tlačítky Validate a Export Jolt JSON a přehledem Asset Contents.
Kontrola konfigurace a export pomocí Validate a Export Jolt JSON.

Použití v GameMakeru#

Přidejte asset_house.jolt.json do Included Files. Při načítání použijte celý název včetně přípony .jolt.json. Pokud je soubor v podsložce, zahrňte ji do cesty.

Included Files v GameMakeru: ve složce datafiles jsou asset_house.jolt.json, asset_shield.jolt.json a asset_weapon.jolt.json.
Exportované Jolt assety v Included Files v GameMakeru.

Ukázka předpokládá, že projekt již spouští fyzikální svět přes jolt_start() a aktualizuje jej přes jolt_update(). Pokud tento základ ještě nemáte, nejprve projděte návod pro prázdný projekt.

Tento kód vložte do události Create objektu domu, který se vytváří až po spuštění fyzikálního světa. Načtení přečte data assetu; jolt_asset_create_body vytvoří statické kolizní těleso. Model domu tím nevykreslí.

GML
body_house = undefined;
var asset = jolt_asset_load("asset_house.jolt.json");
if (is_undefined(asset)) {
    show_debug_message(jolt_get_error().message);
} else {
    body_house = jolt_asset_create_body(asset, JOLT_MOTION_STATIC,
        {position:{x:0,y:0,z:0}});
    if (is_undefined(body_house)) {
        show_debug_message(jolt_get_error().message);
    }
}

V události Clean Up stejného objektu odstraňte těleso pouze tehdy, pokud se úspěšně vytvořilo. Úklid proveďte před ukončením fyzikálního světa; společný svět má ukončovat jeho řídicí objekt až při skončení scény.

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

Další kroky#