Движущаяся цель и WebGL
Сопоставление удара со сценой должно использовать ту же камеру и активную область, что и отрисовка.
Запускаемый пример
Режим rail в комплекте — движущаяся цель на Canvas, а не готовый 3D-движок. Позиция зависит от активного игрового времени. Пауза останавливает движение; сохранённый таймер продолжает его после resume. Попадание сравнивается с текущей отображаемой позицией.
Переход к WebGL
Для 3D-реализации преобразуйте nx/ny в NDC и постройте луч средствами выбранного движка. Используйте камеру игрового вида и актуальные projection/view matrices. Проверяйте collision mask, прозрачные декорации и окклюзию, чтобы луч не поражал невидимую цель сквозь стену.
Ограничения
SDK не выполняет 3D raycast и не гарантирует интеграцию с конкретной версией стороннего движка. Не компенсируйте произвольную задержку перемоткой физики без измерений. Включите в QA быстрое движение, низкий FPS и паузу между показом кадра и обработкой события.
Пример кода
Фрагмент интеграции: переменные игрового проекта задаются приложением. Полный запускаемый пример — в Playground.
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.