Кажется, вы уже ответили на свой вопрос. A *, вероятно, лучший подход. Да, конечно, его можно использовать так, как вы описываете, включая информацию о высоте, чтобы избежать гор. Пока вы можете получить доступ к информации о любой сетке на поверхности вашего мира, нет причин, по которым вы не можете использовать ее в эвристике A *.
Наконец, вы путаете поиск пути с путем следования в конце вашего вопроса. Поиск пути не заботится о гравитации, если вы не добавите его в качестве эвристического и если вы находитесь на поверхности планеты, гравитация будет практически одинаковой по всей поверхности. Во многих играх есть гравитация вместе с движением, я не вижу причин, по которым вы не можете.
По сути, мы хотим отобразить переход от красного к синему, чтобы он был таким же на сфере, как и на кубе.
Поскольку A * часто получает соседей к своему текущему узлу, вы можете легко создать набор функций для получения соседних узлов. Так , например, getXPlus()
, getXMinus()
, getZPlus()
и так далее. Эти функции возьмут текущий узел и вернут узел в направлении, указанном в имени функции.
В большинстве случаев эти функции могут просто увеличивать значение и выполняться по краям, которые будут меняться.
Вы захотите отобразить поверхность вашего куба в 2D систему координат. Как бы вы ни делали, это зависит от вас, им не нужно выстраиваться в линию, просто присвойте каждому пространству сетки уникальную координату X, Y.
Теперь, когда на краю, и получая соседнее пространство сетки, это не обязательно будет просто увеличивать координаты. Мы должны выяснить, к какому лицу мы движемся, и переключиться на координаты этого лица.
Например, получение здесь координаты XPlus изменит координаты X и Y, потому что мы перемещаемся в новое пространство сетки на новой грани. Зеленая линия представляет грань между двумя гранями.
Теперь это всего лишь глобальные координаты, может быть проще использовать внутреннюю локальную систему координат с 3-м измерением, представляющим грань куба, на которой вы находитесь в данный момент.
В любом случае, вам нужно иметь уникальную координату для каждого пространства сетки на поверхности куба. Переход между ними будет зависеть от того, как вы реализуете систему координат. Вам также необходимо знать, где эта координата отображается на поверхности сферы.
Все это в конечном итоге должно быть удалено, чтобы вы даже не знали об этом.