Задать вопрос
krdpsr
@krdpsr
loading...

Как обычно делают сканирование (raycast) в играх?

в движке matter.js есть такая функция - обнаружение тел от заданной точки на линии определенной длины
то есть для определенного тела можно найти все тела на линии в заданном направлении

в игре несколько объектов могут сканировать пространство
например десяток или сотня
например с такой программой: если вижу тело Х то двигаюсь к нему

setInterval() - один для всех или для каждого тела свой?

как лучше ?
периодически для всех тел одновременно запускать сканирование, раз в секунду например
или для каждого тела отдельно это делать
или оба варианта
  • Вопрос задан
  • 102 просмотра
Подписаться 1 Простой 5 комментариев
Пригласить эксперта
Ответы на вопрос 2
Если я вас правильно понял, то под "сканированием" вы понимаете так называемый raycast.

Делают отталкиваясь от ожидаемого поведения.
Обычно либо каждый кадр (или каждый физический кадр), либо по нажатию на кнопку.
Либо если нужно очень много кастов (на столько много, что производительность падает), то каждые N физических кадров/тиков.

Сколько всего этих объектов и сколько рейкастов им нужно?
Для чего именно?

Например если ты делаешь оружие с рейкастом, то логично, что нет смысла делать каст каждые N секунд - тут больше смысл по требованию его запускать (например по нажатию на кнопку мыши)

Если ты делаешь дальномер, на котором постоянно должны меняться показания - тоже логично, что нужно не каждые N секунд, а каждый кадр запускать для каждого такого дальномера.

Или если делаешь такой дальномер/сканер, который по описанию должен раз в N секунд подавать луч - тогда логично, что нет смысла тратить ресурсы на запуск каждый кадр.
Ответ написан
mayton2019
@mayton2019
Bigdata Engineer
Если в игре есть 1000 взаимодействующих тел - то для их "сканирований" надо как минимум посчитать пол-миллиона взаимодействий. Каждое тело может видеть или не видеть каждое. По крайней мере прямая
реализация такого взаимодействия имеет квадратичную стоимость.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы