Raycasting
Filtrování vrstev
Omezí paprsek na vybrané user layers a volitelně ignoruje jedno body.
Raycast filter je oddělený od collision matrix simulace. Vypnutí dvojice vrstev přes jolt_layer_set_collision() nebrání raycastu dotazovat kteroukoliv z nich, pokud ji vybere jeho maska.
Podporované formy filteru#
| Filter | Chování |
|---|---|
| undefined | Všechny user layers; žádné ignorované body. |
| JoltLayer | Pouze tato živá vrstva. |
| [layer_a, layer_b] | Sjednocení živých vrstev; duplicity se odstraní. |
| integer mask | Raw unsigned 32-bit mask; 0 znamená všechny vrstvy. |
| {layers:[...], ignore:body} | Sjednocení vrstev a jeden ignorovaný JoltBody. |
| {mask:value, ignore:body} | Raw mask a jeden ignorovaný JoltBody. |
| {ignore:body} | Všechny vrstvy s ignorováním jednoho body. |
Vrstvy a ignorované body#
var hit = jolt_raycast(0, 0, 2, 20, 0, 2, {
layers: [world_layer, interactable_layer],
ignore: player_body
});Priorita mask#
Pokud options struct obsahuje mask, tato hodnota se použije okamžitě a layers se ignoruje. Zadávejte pouze jedno z těchto polí, aby byl záměr filteru jednoznačný.
// mask má přednost; layers se s ní nespojí.
var filter = {
mask: interactable_mask,
layers: [world_layer],
ignore: player_body
};Mapování raw masky#
JoltLayer handles jsou 1-based, zatímco bity masky jsou zero-based. Handle 1 odpovídá bitu 0 a handle 32 bitu 31. Pole vrstev toto sjednocení vytváří automaticky.
// Vybere layer handles 1 a 3: bity 0 a 2.
var mask = 1 | 4;
var hit = jolt_raycast(0, 0, 2, 20, 0, 2, mask);Pravidla masky#
- Raw mask musí být konečné nezáporné celé číslo od 0 do 4294967295.
- Mask 0 znamená všechny user layers, nikoliv žádnou.
- Prázdné pole vrstev se také převede na mask 0, a proto dotazuje všechny vrstvy.
- Nenulová maska vybírá sjednocení nastavených bitů.
Validace a životnost#
- Každý JoltLayer musí být při dotazu stále platný.
- ignore musí být undefined nebo jeden živý JoltBody v aktivním managed worldu.
- Zničené nebo stale resources způsobí chybu.
- Filter nemění kontakty, collision response, events ani layer matrix.
Co filter neumí vyjádřit#
- Sensor state, motion type ani active/sleeping state.
- GML user_data nebo identitu entity.
- Více než jedno ignorované body.
- Výběr triangle, material nebo compound child.