Самое простое решение, о котором я могу подумать, - это генерировать узлы путевых точек, которые знают, к каким другим узлам они подключены, и затем случайным образом выбирают соединение, которому нужно следовать (возможно, с некоторой эвристикой, направляющейся к вашей цели)
Например,
using System.Linq;
public class Waypoint : MonoBehaviour{
public Waypoint[] Connections;
public Waypoint Next( Waypoint previous, Waypoint finalDestination) {
if (this == finalDestination) return null; // You have arrived
var possibleNext = Connections.Where(m => m != previous && CheckHeuristic(m, finalDestination)); // Dont go backwards, and apply heuristic
if (possibleNext.Count() == 0) throw new System.ApplicationException("No exitable paths from Waypoint"); // Error if no paths available
possibleNext = possibleNext.OrderBy( m => Random.Range(0f, 1f)); // 'shuffle'
return possibleNext.First(); // Grab first 'random' possible path
}
private bool CheckHeuristic(Waypoint candidate, Waypoint finalDestination) {
// Basic 'is not farther' check
return Vector3.Distance(candidate.transform.position, finalDestination.transform.position) <= Vector3.Distance(this.transform.position, finalDestination.transform.position);
}
}
Кроме того, здесь не существует понятия «бесплатный обед». Всегда есть затраты на создание подобных вещей. Вы либо потратите время на изучение A *, либо потратите время на создание путей вручную ...