‹›
Pomocné skripty · Penetrace těles

Diagnostika a důvody odmítnutí

Nejdříve zjistěte, zda selhala registrace, admission, nebo až pohyb uvnitř vytvořeného relationship.

Chyba veřejné funkce a reject při hledání zásahu jsou oddělené věci. Pokud jolt_penetrator_tip vrátí undefined nebo setter false, čtěte jolt_get_error_message(). Pokud Tip existuje, sledujte jeho info, reject a všechny relationships po fyzikálním kroku.

Textový a geometrický debug#

GML
// Enable once.
jolt_debug_enable(true);

// Draw GUI:
jolt_penetration_debug_text(16, 16);

// Existing 3D Draw pass:
jolt_debug_draw(JOLT_DEBUG_SHAPES | JOLT_DEBUG_PENETRATION);

jolt_penetration_debug_text(x=16,y=16) vypíše Tip/body IDs, enabled, reject, state, počet relationships, target, has_entered, capture_source a depth. Geometrický flag kreslí hrot, vstupní bod a osu/limit kanálu. Debug nepřidává síly ani nerozhoduje o capture.

Úplná tabulka reject reason#

Následující názvy odpovídají číselným hodnotám nativního reject enumu. GML wrapper vrací číslo; nedefinuje veřejný enum JoltPenetrationReject. Nezaměňujte je s JoltPenetrationState.

KódNázevCo zkontrolovat
0NoneBez aktuálního odmítnutí; není to samo o sobě event vstupu.
1NotPenetrableTarget není povolený pro penetraci.
2MaskMismatchmask a category_bits nemají společný bit.
3AngleRejectedSkutečný úhel při zásahu je mimo max_angle.
4TipTooFarV hledání není vhodný blízký zásah; ve volném prostoru je to běžné.
5OffAxisGeometrie nevyhověla osovému vstupu.
6LateralVelocityPříliš velká neslučitelná boční složka pohybu.
7AngularVelocityVstupní relativní spin nebo povolený pohybový budget.
8AlreadyOccupiedTip dosáhl svého limitu nebo již má tento target. Nejprve přečtěte relationships.
9PairNotCollidableSensor, layer nebo group pravidla páru.
10UnsupportedShapeNepodporovaný kolizní tvar.
11UnsupportedMotionPenetrator musí být Dynamic; target nesmí být Kinematic.
12IncompatibleConstraintJiný uživatelský constraint připojený k penetratoru.
13CapacityFullKapacita Tipů, relationships nebo kandidátního bufferu.
14DeepOverlapPočáteční vnoření přes capture_overlap, hloubkový limit nebo neplatný start ray uvnitř targetu.
15InvalidConfigNeplatné nastavení; ověřte rozsahy a chybový kanál.
16CommitFailedVytvoření relationship nebylo dokončeno; sledujte rollbacks a platnost bodies.
17MovingOutwardPohyb nesměřuje dovnitř povrchu i podél kladné osy.
18InvalidHandleZaniklý Tip, body nebo svět.
19RearmPendingPo extraction dosud není dostatečné geometrické oddělení.
20CaptureSpeedKladný max_capture_axial_speed je nižší než vstupní rychlost.
21IncompatibleChannelNeslučitelná osa s již aktivním kanálem na stejném body.
22AwaitingContactČekání na přípustné přiblížení/podmínky. Samo neprokazuje existenci intentu.
23NoAxisSurfaceRay podél Tip axis neověřil konečný povrch targetu.
24ContactRegionNevhodná přední oblast, neshoda konečného povrchu/normály nebo jiný blocking overlap.

Praktický postup při potížích#

  • Tip nevznikne: ověřte lokální bod na povrchu, nenulovou osu, podporovaný Dynamic tvar a rozsahy parametrů.
  • Tip existuje, ale není entry: ověřte capture_model, target enabled, mask, layer, aktuální úhel a relativní pohyb.
  • Relationship existuje, ale je Captured: čekejte na skutečnou nezápornou signed_depth; nezaměňujte jej za selhání registrace.
  • Nástroj se zachytí, ale nezasouvá: prohlédněte forward_force, hmotnost, energii nárazu a max_depth.
  • Další zásah nefunguje: sledujte RearmPending a clearance celého tělesa. Zkontrolujte, že nemáte starý relationship uložený jako aktuální.

Metriky#

GML
var metrics = jolt_penetration_metrics();
if (is_struct(metrics)) {
    show_debug_message("Relationships: " + string(metrics.relationships));
    show_debug_message("Candidate drops: " + string(metrics.candidate_drops));
    show_debug_message("Event drops: " + string(metrics.event_drops));
}
PoleVýznam
schemaVerze struktury, nyní 1.
tips / relationshipsAktuální živé počty.
tip_capacity / relationship_capacity / event_capacity / event_countKapacity 128 / 32 / 256 a aktuální obsazení event fronty.
candidates / probes / valid_probesKumulativní počty nalezených kandidátů a geometrických vyhodnocení, nikoli počet unikátních zásahů.
commits / rollbacks / candidate_drops / event_dropsVytvořená spojení, vrácená neúspěšná vytvoření, kapacitní odmítnutí a ztracené eventy.
contact_queries / contact_captures / primed_cancelsKontaktní dotazy, contact-assisted captures a zrušení před actual entry. contact_captures není součet všech model 2 captures.
pre_update_us / probe_us / relationship_update_us / clearance_us / physics_us / contact_usČasové diagnostiky v µs, plněné při zapnutém nativním profilingu. Ve výchozím běhu mohou zůstat 0; veřejné penetration API nemá přepínač profilingu.

Počítadla patří světu a během jeho života rostou; pro cenu jednoho intervalu porovnávejte rozdíl dvou vzorků. Gettery jen čtou diagnostiku. Metriky samy neřeknou přesnou první příčinu každého neúspěšného nárazu; pro reprodukci si ukládejte také konfiguraci a trajektorii.

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_penetration_debug_textjolt_penetration_debug_text(x=16,y=16)Kreslí diagnostický text na souřadnicích x/y, default 16/16. Volej v odpovídajícím Draw kontextu; nejde o historii ani getter.
jolt_penetration_metricsjolt_penetration_metrics()Aktuální schema:1 snapshot events/metrik managed světa, undefined při neplatném světě/transportu; není příkaz změny fyziky.