So, I need to generate some ramps based on user’s input (angle or height) but I can’t seem to find a way to do it.
I’ve stumbled upon some procedural mesh generation scripts but the inability of previewing them in the scene window is making it really hard for me.
I know that I can make ramps using cubes but I don’t like the result and I find it hard to translate user’s input to cubes so I need some kind of way to build a triangular mesh by code.
I have spent the whole day searching for it but, unfortunately, any search that includes the word “triangle” leads just to the basic mesh’s triangles.
It’s not mandatory to generate them from code but I need to build the ramps based on angle or height, and I’m not downloading some ramp prefab or model because I don’t know if I’ll be able to stretch it to fit the given angle or height.
EDIT:
I’ve managed to get it almost working but it doesn’t draw one triangle on the top, leading to the result in the image.
Here’s the code that I’m using:
// This first list contains every vertex of the mesh that we are going to render
var newVertices = new List<Vector3>();
// The triangles tell Unity how to build each section of the mesh joining
// the vertices
var newTriangles = new List<int>();
// The UV list is unimportant right now but it tells Unity how the texture is
// aligned on each polygon
var newUV = new List<Vector2>();
mesh = GetComponent<MeshFilter>().mesh;
// Vertices
newVertices.Add(new Vector3(0, 0, 0));
newVertices.Add(new Vector3(0, 0, 10));
newVertices.Add(new Vector3(10, 0, 10));
newVertices.Add(new Vector3(10, 0, 0));
newVertices.Add(new Vector3(10, 10, 0));
newVertices.Add(new Vector3(10, 10, 10));
// Triangles
newTriangles.Add(0);
newTriangles.Add(1);
newTriangles.Add(3); //1
newTriangles.Add(1);
newTriangles.Add(2);
newTriangles.Add(3); //2 - Bottom
newTriangles.Add(0);
newTriangles.Add(4);
newTriangles.Add(3); //3 - Right
newTriangles.Add(1);
newTriangles.Add(2);
newTriangles.Add(5); //4 - Left
newTriangles.Add(0);
newTriangles.Add(1);
newTriangles.Add(4); //5
newTriangles.Add(1);
newTriangles.Add(4);
newTriangles.Add(5); //6 - Top
newTriangles.Add(4);
newTriangles.Add(5);
newTriangles.Add(3); //7
newTriangles.Add(3);
newTriangles.Add(5);
newTriangles.Add(2); //8 - Front
// UV
foreach (var newVertex in newVertices)
{
newUV.Add(new Vector2(newVertex.x, newVertex.y));
}
// Finalize
mesh.Clear();
mesh.vertices = newVertices.ToArray();
mesh.triangles = newTriangles.ToArray();
mesh.uv = newUV.ToArray();
mesh.Optimize();
mesh.RecalculateNormals();