Raycasting

Low-Level Raycasting

Dotazuje explicitní world pomocí počátku, směru a maximální vzdálenosti.

Low-level API je určeno projektům, které spravují worldy přímo. Oproti managed endpoint formě přijímá vybraný world handle, směrový vektor normalizovaný bridgem a samostatnou kladnou maximální vzdálenost.

Funkce#

GML
jolt_world_raycast(world, ox, oy, oz, dx, dy, dz, max_distance)

jolt_world_raycast_filtered(world, ox, oy, oz, dx, dy, dz,
    max_distance, layer_mask=0, ignore_body=0)

jolt_world_raycast_all(world, ox, oy, oz, dx, dy, dz,
    max_distance, layer_mask=0, ignore_body=0)

Smlouva argumentů#

ArgumentPožadavek
worldŽivý explicitní world handle.
originTři konečné world-space hodnoty.
directionLibovolný konečný nenulový vektor; bridge jej normalizuje.
max_distanceKonečná hodnota větší než nula.
layer_maskUnsigned 32-bit integer; 0 vybírá všechny user layers.
ignore_body0 nebo jeden živý body handle patřící vybranému worldu.

Příklad explicitního worldu#

GML
var result = jolt_world_raycast_filtered(
    world,
    origin_x, origin_y, origin_z,
    direction_x, direction_y, direction_z,
    50,
    layer_mask,
    ignored_body_handle
);

if (result.error_code != JOLT_ERROR_NONE) {
    show_debug_message(result.error_message);
}
else if (result.hit) {
    show_debug_message("Body handle: " + string(result.body));
}

Low-level návratová smlouva#

Closest queries vrací úplný struct s component i convenience fields. jolt_world_raycast_all() vrací seřazené low-level structs a prázdné pole při minutí i chybě; pokud je nutné tyto stavy odlišit, ihned přečtěte jolt_get_last_error_code() a jolt_get_last_error_message().

Managed compatibility overload#

GML
// Starší explicit-world overload:
jolt_raycast(world, ox, oy, oz, dx, dy, dz, max_distance)

// Managed endpoint overload:
jolt_raycast(x1, y1, z1, x2, y2, z2, filter=undefined)

Osm argumentů vybere starší explicit-world overload. Šest nebo sedm argumentů vybere managed endpoint formu. V novém low-level kódu preferujte pojmenované funkce jolt_world_raycast*, aby byla smlouva souřadnic jednoznačná.

Zpracování snapshotu#

Native bridge používá interní current-raycast snapshot, zatímco GML wrapper synchronně sestavuje veřejný struct. Pracujte s vrácenou GML hodnotou a nepokoušejte se samostatně volat bridge getters.

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_world_raycastjolt_world_raycast(world, ox, oy, oz, dx, dy, dz, max_distance)World handle, světový origin XYZ m, nenulový směr XYZ normalizovaný nativně, max_distance>0 m. Filtered: mask0 všechny, ignore_body0 žádné. Vždy struct hit, error_code, error_message, body handle, x/y/z, normal_x/y/z, fraction, distance, position, normal. Miss/error mají hit=false a nulová data; rozliš error_code.
jolt_world_raycast_alljolt_world_raycast_all(world, ox, oy, oz, dx, dy, dz, max_distance, layer_mask = 0, ignore_body = 0)Stejné origin/direction/distance a filtry jako filtered; pole zásahů seřazené podle vzdálenosti. Miss i chyba vrací []; chybový stav rozliš ihned. Body jsou handles.
jolt_world_raycast_filteredjolt_world_raycast_filtered(world, ox, oy, oz, dx, dy, dz, max_distance, layer_mask = 0, ignore_body = 0)World handle, světový origin XYZ m, nenulový směr XYZ normalizovaný nativně, max_distance>0 m. Filtered: mask0 všechny, ignore_body0 žádné. Vždy struct hit, error_code, error_message, body handle, x/y/z, normal_x/y/z, fraction, distance, position, normal. Miss/error mají hit=false a nulová data; rozliš error_code.