Raycasting

První raycast

Vytvoří bezpečný interakční ray od inicializace až po zpracování výsledku.

Managed API používá výchozí world vytvořený funkcí jolt_start(). Zadejte world-space počátek a koncový bod, proveďte dotaz, ihned přečtěte globální chybu a údaje o kontaktu použijte pouze tehdy, když je hit true.

1. Spuštění fyziky#

GML
if (!jolt_start()) {
    var error = jolt_get_error();
    show_error(error.context + ": " + error.message, true);
}

2. Paprsek od počátku ke koncovému bodu#

GML
var from = { x: camera_x, y: camera_y, z: camera_z };
var to = {
    x: from.x + aim_x * 20,
    y: from.y + aim_y * 20,
    z: from.z + aim_z * 20
};

var hit = jolt_raycast(
    from.x, from.y, from.z,
    to.x, to.y, to.z
);

3. Rozlišení chyby, minutí a zásahu#

GML
var error = jolt_get_error();

if (error.code != JOLT_ERROR_NONE) {
    show_debug_message(error.context + ": " + error.message);
}
else if (!hit.hit) {
    // Úspěšný dotaz s volnou dráhou.
}
else {
    show_debug_message("Vzdálenost: " + string(hit.distance));
    if (is_struct(hit.body)) {
        hit.body.add_impulse(aim_x * 2, aim_y * 2, aim_z * 2);
    }
}

4. Ignorování tělesa, které paprsek vysílá#

GML
var hit = jolt_raycast(from.x, from.y, from.z, to.x, to.y, to.z, {
    ignore: player_body
});

ignore přijímá jeden živý JoltBody z aktivního výchozího worldu. Kamera nebo zbraň tak okamžitě nezasáhne vlastní těleso.

Časté počáteční chyby#

  • Volání dotazu před jolt_start().
  • Předání směru namísto koncového bodu.
  • Shodné endpoints nebo nekonečné hodnoty.
  • Čtení position či normal bez předchozí kontroly hit.
  • Předpoklad, že sensory nebo vlastní body jsou automaticky vyloučeny.
  • Použití tenkého paprsku tam, kde je nutný pohyb objemu.

Integrace s aktuálním projektem#