Как быстро работает Raycast в Unity3D? Смогут ли телефоны со слабыми процессорами бросать тысячи рэйкастов в секунду, не особо напрягаясь?
Для чего это нужно:
Есть 2d игрушка, представляющая из себя поле NxM клеток, скажем, порядка 100х100. На каждую из клеток игрок либо может встать, либо не может. Нужно проложить кратчайший маршрут из точки A этого поля в точку B. Не знаю, если ли алгоритм эффективнее, чем полный (или почти полный) перебор, но в любом случае придется много раз вызывать Raycast, чтобы узнать, можно ли проложить путь через клетку или нет. Не убьет ли это производительность, или же стоит завести двумерный массив под игровое поле, в котором будет указанно, можно ли пройти через клетку или нет?
Более того - в юнити есть реализация как бы даже не на основе A*, гуглите Unity pathfinding. Работает очень быстро.
Полный перебор - самый неэффективный алгоритм.
Ну и в играх - забудьте о телефонах со слабыми процессорами. Платят только топы ;-)
Артем Да, я про него. Применить элементарно. Заполняете ваше поле клетками физически, как геймобджектами. Генерируете навмеш. Далее на непроходимые клетки вешаете NavMeshObstacle с парамтером "продырявить навмеш". Потом ставите агента в одну клетку, и просите его построить путь в другую клетку. Проверяете результат построения. Это если надо в реалтайме менять матрицу проходимости. Если не в реалтайме - то еще проще - прям в навмеш запекаете проходимые и непроходимые зоны.
Какой-то очень затратный способ вы выбрали... не проще будет создать банальную матрицу(карту мира) и при перемещении постоянно обновлять её(добавлять/перемещать/удалять препятствия). По скорости это будет намного эффективней чем Raycast, так как не требует обращений к физическому движку вовсе. А методов поиска пути по матрице огромное множество, то же самый А* как уже писалось... Плюс вы не будет привязываться к Unity3d.