Performance issues (unity stops working when I run this code!)

To start with, this is not from any of the courses btw. What’s causing the came to a halt when I run this. I’m trying to make a terrain mesh the using marching cubes. Please don’t use this code in your own game, I worked really hard on this code! Thank you!

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
[RequireComponent(typeof(MeshFilter))]
public class TerrainGenerator : MonoBehaviour
{
    float IsoSurfaceLevel = 0;
 
    Density density;
    
    Vector3 vertexPos;
 
 
    Vector3[] cubeCorners;
 
    List<Vector3> vertices;
 
    Mesh mesh;
 
    MarchTable table;
 
    private void Awake() {
        vertices = new List<Vector3>();
        density = GetComponent<Density>();
        table = GetComponent<MarchTable>();
        mesh = new Mesh();
        GetComponent<MeshFilter>().mesh = mesh;
    }
 
    void Start()
    {
      generateTerrain(); 
    }
 
    
 
    // Update is called once per frame
    void Update()
    {
 
    }
 
   

    void generateTerrain()
    {
 
    mesh.Clear();
 
        for (int i = 0; i < 5; i++)
        {
            for (int j = 0; j < 5; j++)
            {
                for (int k = 0; k < 5; k++)
                {
                     
                    float[] cubeCornersValues = { 
                    
                    density.generateDensity(new Vector3 (i, j, k)),
 
                    density.generateDensity(new Vector3 (i + 1, j, k)),
 
                    density.generateDensity(new Vector3 (i + 1, j, k + 1)),
 
                    density.generateDensity(new Vector3 (i, j, k + 1)),
 
                    density.generateDensity(new Vector3 (i, j + 1, k)),
 
                    density.generateDensity(new Vector3 (i + 1, j + 1, k)),
 
                    density.generateDensity(new Vector3 (i + 1, j + 1, k + 1)),
 
                    density.generateDensity(new Vector3 (i, j + 1, k + 1))
                    };
 
 
                    cubeCorners = new Vector3[8]{ 
                    
                    new Vector3 (i, j, k),
 
                    new Vector3 (i + 1, j, k),
 
                    new Vector3 (i + 1, j, k + 1),
 
                    new Vector3 (i, j, k + 1),
 
                    new Vector3 (i, j + 1, k),
 
                    new Vector3 (i + 1, j + 1, k),
 
                    new Vector3 (i + 1, j + 1, k + 1),
 
                    new Vector3 (i, j + 1, k + 1)
                    };
 
                     if (i+1 >= 19 || j+1 >= 19 || k+1 >= 19) 
                    {
                            continue; 
                    }
 
                    int cubeIndex = 0;
                    for (int X = 0; X < 0; X++)
                    {
                        if(cubeCornersValues[0] < IsoSurfaceLevel)
                        {
                            cubeIndex = 1 << i;
                        }
                    }
 
                    int[] triangulation = table.triangulation[cubeIndex];
 
                    int h = 0;
                    int numTris = 0;
                    foreach(int edgeIndex in triangulation) 
                    {
                      if(edgeIndex == -1)
                      {   
                        numTris = h/3;                     
                        break;
                      }

                        h++;
                    }

                    int[] meshTriangles = new int[numTris * 3];
 
                    for (int e = 0; e >= numTris; e++)
                    {
                    int g = 0;
 
                    foreach(int edgeIndex in triangulation)
                    {
                        g++;                        
                        if(edgeIndex == -1) 
                        {
 
                            continue;
                        }
 
                        int indexA = table.cornerIndexAFromEdge[edgeIndex];
                        int indexB = table.cornerIndexBFromEdge[edgeIndex];
 
                        vertexPos = ((cubeCorners[indexA] + cubeCorners[indexB]) / 2);
 
                        vertices.Add(vertexPos);
                        meshTriangles[e * 3 + g] = e * 3 + g;
                    }
                    }
                    
 
                    mesh.vertices = vertices.ToArray();
                    mesh.triangles = meshTriangles;
                    
                    mesh.RecalculateNormals();
                    
                }
            }
        }
        
    }

     void OnDrawGizmos() 
    {
        
 
        if(cubeCorners == null) return;
 
 
        foreach(Vector3 cubecorner in cubeCorners)
        {
            Gizmos.color = Color.black;
            Gizmos.DrawSphere(cubecorner, 0.1f);      
        }
    }
}

 


Privacy & Terms