//Not meant for real-time use public void ConstructGraph() { if (meshGraph == null) { Debug.Log("No mesh to operate on! Please set meshGraph before calling this function"); return; } //Create a sampler Gameobject to perform raycasts to neighboring nodes Sampler = new GameObject("Sampler"); List <int> neighbors; List <int> DeadVertices = new List <int>(); List <pathNode> DeadNodes = new List <pathNode>(); simpleGraph = new GraphSimple(); simpleGraph.AddNodes(meshGraph.vertexCount); float dist = 0; for (int i = 0; i < meshGraph.vertexCount; i++) { //if(DeadVertices.Contains(i)) //continue; neighbors = GetNeighbors(i); pathNode currentNode = simpleGraph.graph[i]; currentNode.position = transform.TransformPoint(meshGraph.vertices[i]); for (int j = 0; j < neighbors.Count; j++) { dist = Vector3.Distance(transform.TransformPoint(meshGraph.vertices[i]), transform.TransformPoint(meshGraph.vertices[neighbors[j]])); currentNode.neighbors.Add(simpleGraph.graph[neighbors[j]]); currentNode.weight.Add(dist); Sampler.transform.position = transform.TransformPoint(meshGraph.vertices[i]); if (Physics.Raycast(Sampler.transform.position, Vector3.Normalize(meshGraph.vertices[neighbors[j]] - meshGraph.vertices[i]), dist)) { if (!DeadVertices.Contains(neighbors[j])) { DeadVertices.Add(neighbors[j]); DeadNodes.Add(simpleGraph.graph[neighbors[j]]); break; } } } //Debug.Log(i); } foreach (pathNode node in DeadNodes) { simpleGraph.DeleteNode(node.ID); } //Rebuild mesh NavMeshGenerator.RemoveTriangles(meshGraph, DeadVertices); }