2016-04-29 3 views
0

В настоящее время я делаю игру RTS в единстве, и мне нужен способ рассчитать кратчайший путь между двумя точками на непрерывной 2d-плоскости, где есть определенные препятствия.Алгоритм обработки непрерывного пространства поиска?

У меня есть начальная позиция, конечная позиция и функция, которая может проверить, действительно ли позиция. Мне нужен алгоритм, который возвращает последовательность точек для перемещения, чтобы добраться до места назначения.

Большинство алгоритмов пути, таких как A * и IDA *, которые, как я знаю, требуют дискретизированных поисковых пространств. Я бы разделил самолет на сетку сам, но я боюсь, что это приведет к появлению зигзагообразных узоров, которые выглядят действительно неестественными при движении по диагонали. Есть ли способ облегчить эту проблему или другой алгоритм изменения, который я могу использовать? Ему даже не нужно найти абсолютный кратчайший путь, просто путь, который имеет смысл.

+1

Возможно, вы найдете лучшие решения на gamedev.SE. Каждая реализация, которую я видел до сих пор (не так много), помещает произвольные «узлы» в пространстве, дискретируя ее. Если вы умны (и щедрые) с местами мест размещения и узлов, это выглядит несколько естественным. – Mephy

+0

Что вы хотите, это сетевая сетка и использовать A * (или аналогичную, всю работу). Есть много способов архивировать это, от создания его вручную, до полностью автоматических решений - все они слишком много для подробного описания в этом формате. Но в Интернете много статей. Почему вы не используете встроенное навигационное решение Unitys? – yes

ответ

1

Один из подходов может заключаться в дискретизации пространства поиска, рассматривая только точки, интересные для строгания - точки на границах препятствий, например только углы ограничивающих прямоугольников, а затем использовать любой из алгоритмов, которые вы уже знаете.

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

Смежные вопросы