Я впервые задаю вопрос здесь, поэтому, пожалуйста, прости меня, если я сделаю какие-либо ошибки.
В настоящее время я использую Unity 2019.1.14f1 на Windows 10 Enterprise с Intel Xeon E5-1650 v4с 32,0 ГБ ОЗУ, GeForce GTX 1080 с последними драйверами.
Чтобы дать небольшой контекст этой проблеме, я настроил сцену единства, в которой есть набор объектов с NavLinkProxy класс и NavNodeProxy класс, который хранит некоторые данные. Они используются для генерации маршрутов, в частности, с использованием алгоритма Дейкстры. Ниже приведен код, который я использовал:
private static void DijkstraSearch(VenueManager venueManager, NavNodeProxy start, NavNodeProxy end)
{
// Priority queue
var pQueue = new BinaryHeap<NavNodeProxy>();
// Set cost of start node to 0
start._NavNodeInfo.MinCostToStart = 0;
// Add start node to priority queue
pQueue.Add(start);
do
{
// Remove node on top of heap and set it as node value
var node = pQueue.Remove();
List<NavLinkProxy> nodeLinks = venueManager._ActiveNavLinks.FindAll(result => (result._NavLinkInfo.n1 == node) || (result._NavLinkInfo.n2 == node));
for (int i = 0; i < nodeLinks.Count; i++)
{
NavNodeProxy connectingNode;
if (nodeLinks[i]._NavLinkInfo.n1._NavNodeInfo.id == node._NavNodeInfo.id)
connectingNode = nodeLinks[i]._NavLinkInfo.n2;
else
connectingNode = nodeLinks[i]._NavLinkInfo.n1;
if (connectingNode._NavNodeInfo.Visited)
continue;
if (connectingNode._NavNodeInfo.MinCostToStart == Mathf.Infinity || node._NavNodeInfo.MinCostToStart + nodeLinks[i]._NavLinkInfo.horizontalLength < connectingNode._NavNodeInfo.MinCostToStart)
{
connectingNode._NavNodeInfo.MinCostToStart = node._NavNodeInfo.MinCostToStart + nodeLinks[i]._NavLinkInfo.horizontalLength;
connectingNode._NavNodeInfo.NearestToStart = node;
if (!pQueue.heapList.Contains(connectingNode))
pQueue.Add(connectingNode);
}
}
node._NavNodeInfo.Visited = true;
if (node == end)
return;
} while (pQueue.heapList.Any());
}
Сначала маршрут генерируется нормально, и он отлично работает, если я также изменю положение end .
Однако, когда я меняю положение start и пытаюсь сгенерировать маршрут, Unity зависает, обычно оставаясь полностью не отвечающим и вынуждая меня принудительно закрыть его.
Я пыталсяпоменяйте местами объекты начального и конечного узлов в сцене и повторите описанные выше шаги, чтобы получить точно такие же результаты. Помимо этого, я не очень уверен, что может произойти, чтобы дать мне этот результат.
Редактировать: Отредактировал сообщение с правильным кодом.