Moving target and WebGL
Impact resolution must use the same camera and active region as rendering.
Runnable example
The included rail mode is a moving Canvas target, not a complete 3D engine. Its position depends on active game time. Pause freezes movement; resume continues the preserved timer. An impact is evaluated against the currently displayed position.
WebGL adaptation
For 3D, convert nx/ny into NDC and construct a ray with your chosen engine. Use the gameplay camera and current projection/view matrices. Test collision masks, transparent decoration and occlusion so a ray cannot hit an invisible target through a wall.
Limits
The SDK does not perform 3D raycasts or certify a particular third-party engine version. Do not compensate arbitrary latency by rewinding physics without measurements. Include fast movement, low FPS and a pause between drawing and event processing in QA.
Code example
Integration excerpt: game-specific variables belong to the application. Playground contains the runnable reference.
const ndc = {x: hit.nx * 2 - 1, y: hit.ny * 2 - 1};
// Pass ndc to the tested raycast API of your renderer.
// SDK supplies coordinates, not a 3D physics engine.