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); }
// 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>(); }
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; } }