// Use this for initialization void Start() { width = gameObject.GetComponent <MeshFilter>().mesh.bounds.size.x; height = gameObject.GetComponent <MeshFilter>().mesh.bounds.size.z; //gameObject.AddComponent("MeshFilter"); Destroy(gameObject.GetComponent("MeshCollider")); MeshRenderer renderer = gameObject.GetComponent("MeshRenderer") as MeshRenderer; Graph = gameObject.AddComponent <GraphMesh>() as GraphMesh; //float timer =Time.timeSinceLevelLoad; //Debug.Log ("Getting Plane: "+timer); //gameObject.GetComponent<MeshFilter>().mesh=NavMeshGenerator.CreatePlane(width,height,segments); //Debug.Log ("Plane Built: "+(Time.realtimeSinceStartup-timer)); //timer =Time.realtimeSinceStartup; //Graph.meshGraph=gameObject.GetComponent<MeshFilter>().mesh; renderer.material = GraphMat; //gameObject.transform.localScale=new Vector3(2,2,2); //Debug.Log ("Constructing new Plane: "+timer); Graph.BuildPlaneGraph(width, height, segments); Destroy(gameObject.GetComponent <MeshFilter>().mesh); //Debug.Log ("Plane Built: "+(Time.realtimeSinceStartup-timer)); for (int i = 0; i < AICount; i++) { GameObject tempObj = Instantiate(AI) as GameObject; (tempObj.GetComponent(typeof(SimpleAIGraphController)) as SimpleAIGraphController).ChangeGraph(Graph.Graph); } }
void BuildGraphs() { //Get width/Height of plane it is attached to. for (int i = 0; i < Parameters.Length; i++) { float width = Parameters[i].GetComponent <MeshFilter>().mesh.bounds.size.x; float height = Parameters[i].GetComponent <MeshFilter>().mesh.bounds.size.z; //Debug.Log ("Width= "+width+" Height= "+height); //Debug.Log(Parameters[i].name); Destroy(Parameters[i].GetComponent("MeshCollider")); //MeshRenderer renderer = Parameters[i].GetComponent("MeshRenderer") as MeshRenderer; GraphMesh Graph = Parameters[i].gameObject.AddComponent <GraphMesh>() as GraphMesh; Graph.BuildPlaneGraph(width, height, Parameters[i].Segments); GraphManager.AddGraph(Graph.Graph); Parameters[i].GraphID = Graph.Graph.GraphID; Destroy(Parameters[i].GetComponent <MeshFilter>().mesh); //Destroy(Parameters[i].GetComponent("MeshCollider")); Parameters[i].gameObject.AddComponent <MeshCollider>(); } }
void BuildConnections() { List <GameObject> Doors = new List <GameObject>(); foreach (Transform child in transform) { if (child.name.Contains("Door")) { Doors.Add(child.gameObject); } } //Raycast twice to get graphs on each side foreach (GameObject door in Doors) { if (!door.activeSelf) { continue; } float width = door.GetComponent <MeshFilter>().GetComponent <Renderer>().bounds.size.x; float height = door.GetComponent <MeshFilter>().GetComponent <Renderer>().bounds.size.z; GraphA = null; GraphB = null; ray.direction = Vector3.down; if (width > height) { ray.origin = door.transform.position + new Vector3(0, 0, height / 2); } else { ray.origin = door.transform.position + new Vector3(width / 2, 0, 0); } if (Physics.Raycast(ray, out hit)) { GraphA = hit.collider.gameObject.GetComponent <GraphMesh>(); GraphIDA = GraphA.Graph.GraphID; NodeA = GraphA.Graph.GetClosestNode(hit.point); GraphAName = hit.collider.name; } if (width > height) { ray.origin = door.transform.position + new Vector3(0, 0, -height / 2); } else { ray.origin = door.transform.position + new Vector3(-width / 2, 0, 0); } if (Physics.Raycast(ray, out hit)) { GraphB = hit.collider.gameObject.GetComponent <GraphMesh>(); GraphIDB = GraphB.Graph.GraphID; NodeB = GraphB.Graph.GetClosestNode(hit.point); GraphBName = hit.collider.name; } if (GraphA != null && GraphB != null) { Debug.Log("Connecting Graph " + GraphAName + " at node " + NodeA.ID + " with " + GraphBName + " at node " + NodeB.ID); GraphManager.ConnectGraphs(GraphIDA, NodeA.ID, GraphIDB, NodeB.ID); } } }