示例#1
0
    public void Regenerate(bool rebuild = false)
    {
        float tStart = Time.realtimeSinceStartup;

        string path = levelDirectory + gameObject.name + ".asset";

        if (!rebuild && Map.IsMap(path))
        {
            map = Map.Read(path);
        }
        else
        {
            map = Map.Generate(new DepthFirstGenerator(width, height));
            if (!Application.isPlaying)
            {
                map.SaveToFile(path);
            }
        }

        MeshFilter filter = GetComponent<MeshFilter>();
        if (filter == null)
            gameObject.AddComponent<MeshFilter>();

        ProceduralMesh pm = new ProceduralMesh();
        pm.Generate(map);
        pm.Compile();

        GetComponent<MeshCollider>().sharedMesh = pm.Mesh;
        filter.sharedMesh = pm.Mesh;

        float tEnd = Time.realtimeSinceStartup;
        float tTotal = tEnd - tStart;
        Debug.Log("Level Regenerate( Maze: " + rebuild + " ). Time: " + tTotal);
    }
示例#2
0
    // Use this for initialization
    void Start()
    {
        proceduralMesh = new BoxProceduralMesh();
        proceduralMesh.Parameters["Width"]  = Width;
        proceduralMesh.Parameters["Length"] = Length;
        proceduralMesh.Parameters["Height"] = Height;
        proceduralMesh.Generate(2);
        //proceduralMesh.FlipNormals(); Flip normals for editor, not for testing

        gameObject.AddComponent <MeshFilter>().mesh = proceduralMesh.Mesh;

        mc            = gameObject.GetComponent <MeshCollider>();
        mc.sharedMesh = GetComponent <MeshFilter>().mesh;
        //mc.convex = true; Off for editor, on for testing
        mc.convex = true;

        MeshRenderer mr = gameObject.AddComponent <MeshRenderer>();

        mr.material = new Material(Shader.Find("Standard"));
        mr.material.EnableKeyword("_MainTex");
        mr.material.SetTexture("_MainTex", texture);

        /*GameObject go = new GameObject("Bounds");
         * go.transform.parent = this.transform;
         * go.transform.localPosition = Vector3.zero;
         * go.AddComponent<BoxCollider>();
         * go.GetComponent<BoxCollider>().size = proceduralMesh.Mesh.bounds.size;
         * go.layer = LayerMask.NameToLayer("Ignore Raycast");
         */

        MeshDeformer md = gameObject.AddComponent <MeshDeformer>();

        //Rigidbody rb = gameObject.AddComponent<Rigidbody>();
        //rb.mass = 50;//gameObject.GetComponent<Rigidbody>();
    }
示例#3
0
    void EditorFixedUpdate()
    {
        if (Width != proceduralMesh.Parameters["Width"] || Height != proceduralMesh.Parameters["Height"] || Length != proceduralMesh.Parameters["Length"])
        {
            proceduralMesh.Parameters["Width"]  = Width;
            proceduralMesh.Parameters["Length"] = Length;
            proceduralMesh.Parameters["Height"] = Height;

            proceduralMesh.Generate(2);
            //proceduralMesh.FlipNormals();

            gameObject.GetComponent <MeshFilter>().mesh = proceduralMesh.Mesh;
            Destroy(gameObject.GetComponent <BoxCollider>());
            gameObject.AddComponent <BoxCollider>();
        }

        if (!proceduralMesh.Flipped)
        {
            proceduralMesh.FlipNormals();
            //gameObject.GetComponent<MeshFilter>().mesh = proceduralMesh.Mesh;
        }
    }