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