Итак, я реализовал алгоритм A * в Unity C #, чтобы провести несколько тестов для создания 2D-игры. Я знаю, что есть несколько компонентов, которые помогут вам в этом, но я хочу попробовать себя только для испытания.
Я в основном прочитал, как A * должен вести себя, и перевел поведение в код. Это почти работает. Но есть некоторые случаи, когда соседние плитки имеют одинаковый счет (расстояние до Манхэттена + расстояние от источника), и вы в конечном итоге получаете путь, который ведет к месту назначения, но не самый короткий. Как вы можете видеть на изображении, эти две соседние плитки имеют одинаковую оценку, но я выбираю случайную единицу в этой точке ... (На рисунке ниже начальной точкой является кошка, а красным крестиком - точка назначения Зеленые полупрозрачные файлы - это расчетный путь)
![enter image description here](https://i.stack.imgur.com/mGhHZ.jpg)
Я думал, что, поскольку плиток не так много, я мог бы рассчитать 4 различных пути из 4 начальных соседних плиток, сохранить действительные в массиве, а затем просто использовать самые короткие, но, возможно, это будет слишком много накладных расходов и есть другое решение?
Для расчета расстояния я использую базовый расчет:
private int CalculateManhattanDistance(int x1, int x2, int y1, int y2)
{
return Mathf.Abs(x1 - x2) + Mathf.Abs(y1 - y2);
}