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#
if (!jolt_start()) {
var error = jolt_get_error();
show_error(error.context + ": " + error.message, true);
}2. Paprsek od počátku ke koncovému bodu#
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#
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á#
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.