Ejemplo n.º 1
0
    // 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);
        }
    }
Ejemplo n.º 2
0
 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>();
     }
 }
Ejemplo n.º 3
0
    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);
            }
        }
    }