2017-06-16 7 views
2

Ich folgte einem Tutorial zum Erstellen eines prozeduralen generierten Labyrinths in Einheit mit C#, dass beim Klicken mit der Maustaste, erzeugt es ein neues Labyrinth.Verfahren Irrgarten entfernen alte Collider

Wenn ich jedoch ein neues Labyrinth erzeuge, sieht alles gut aus, aber die MeshCollider für das alte Labyrinthgitter ist noch vorhanden, zusätzlich zu dem neuen Labyrinth MeshCollider, das zahlreiche unsichtbare Wände bildet.

Wie würde ich die alten MeshCollider s in meinem Skript löschen, so dass sie entfernt werden und nur das neu erzeugte Mesh bleibt?

Initial Labyrinth Bild

Initial maze image

Zweites Labyrinth Bild

Second maze image

Jedes Labyrinth, nach dem ersten, hat die alten MeshCollider s durch die grüne Kontur dargestellt und es sieht aus wie es nur neue MeshCollider s macht und nicht wieder Platzieren Sie den alten mit einem neuen. Ich dachte, ich könnte dieses Problem beheben, indem die Mascheneinstellung und MeshCollider auf null, dann neue Masche am Anfang jeder neuen Labyrinths Generation, aber es tut nichts:

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class Mesh_Generator : MonoBehaviour { 

public SquareGrid squareGrid; 
public MeshFilter walls; 
public MeshFilter cave; 

public bool is2D; 

List<Vector3> vertices; 
List<int> triangles; 

Dictionary<int,List<Triangle>> triangleDictionary = new Dictionary<int, List<Triangle>>(); 
List<List<int>> outlines = new List<List<int>>(); 
HashSet<int> checkedVerticies = new HashSet<int>(); 

public void GenerateMesh(int[,] map, float squareSize){ 
    triangleDictionary.Clear(); 
    outlines.Clear(); 
    checkedVerticies.Clear(); 

    squareGrid = new SquareGrid (map, squareSize); 

    vertices = new List<Vector3>(); 
    triangles = new List<int>(); 

    for (int x = 0; x < squareGrid.squares.GetLength (0); x++) { 
     for (int y = 0; y < squareGrid.squares.GetLength (1); y++) { 
      TriangulateSquare (squareGrid.squares [x, y]); 
     } 
    } 

    Mesh mesh = null; 
    mesh = new Mesh(); 

    cave.mesh = mesh; 

    mesh.vertices = vertices.ToArray(); 
    mesh.triangles = triangles.ToArray(); 
    mesh.RecalculateNormals(); 
    if (!is2D) { 
     CreateWallMesh(); 
    } 
} 


void CreateWallMesh(){ 

    CalculateMeshOutLines(); 

    List<Vector3> wallVerticies = new List<Vector3>(); 
    List<int> wallTriangles = new List<int>(); 
    Mesh wallMesh = new Mesh(); 
    float wallHeight = 5; 

    foreach (List<int> outline in outlines){ 
     for (int i = 0; i < outline.Count -1; i ++){ 
      int startIndex = wallVerticies.Count; 
      wallVerticies.Add (vertices [outline [i]]); // left vertex 
      wallVerticies.Add (vertices [outline [i+1]]); // right vertex 
      wallVerticies.Add (vertices [outline [i]] - Vector3.up * wallHeight); // bottom left vertex 
      wallVerticies.Add (vertices [outline [i+1]] - Vector3.up * wallHeight); // bottom right vertex 

      wallTriangles.Add (startIndex + 0); //triangle 1 
      wallTriangles.Add (startIndex + 2); 
      wallTriangles.Add (startIndex + 3); 

      wallTriangles.Add (startIndex + 3); //triangle 2 
      wallTriangles.Add (startIndex + 1); 
      wallTriangles.Add (startIndex + 0); 
     } 
    } 
    wallMesh.vertices = wallVerticies.ToArray(); 
    wallMesh.triangles = wallTriangles.ToArray(); 
    walls.mesh = wallMesh; 


    MeshCollider wallCollider = walls.gameObject.AddComponent<MeshCollider>(); 
    wallCollider = null; 
    wallCollider = new MeshCollider(); 
    wallCollider.sharedMesh = wallMesh; 
} 

Antwort

0

Von here, sollten Sie Mesh.Clear nennen „, bevor Dreiecken Wiederaufbau Array. "

mesh = new Mesh(); 
cave.mesh.Clear(); 
cave.mesh = mesh; 
+0

Ich denke, dass ich die Quelle des Problems zu finden, was passiert ist, ist, dass in meinem Map-Generator-Skript auf dem Programm ruft aufgeführt, über den ein MeshCollider 'MeshCollider wallCollider = walls.gameObject.AddComponent schafft (); ' was ich tun muss, ist dies nur beim ersten Mal passieren und nicht bei jedem folgenden Klick passieren –

Verwandte Themen