I used the Mesh class to create a curved wall and it worked well as the shape is exactly what I want. However, the shading is off as you cannot tell the top from the side as I can with a basic cube mesh. I use Vertex-Lit shader and the top of the curved wall is completely flat but does not light up on top like the ther meshes. I use a simple direct light straight down and the camera is looking down from above as well. I might be missing something when i created the curved wall, i did call RecalculateNormals and set the uvs although i dont know which effects the shader. The straight wall is lit like I want. Thank you


Edit: here is after swapping triangle order in step commented as top 1. Here is my code. I think I have the vertices and triangles but I dont understand the uvs and if I did that right.
var curveMaterial : Material;
function Start() {
CreateCurvedWall(0,0,9,10,0,45,10,0);
}
function CreateCurvedWall( xc : float , zc : float, r1 : float, r2 :float, sa : int, ea : int, ht : int, btm : int) {
var newCurvedWall : GameObject = new GameObject("Curved Wall");
var newMesh : Mesh = new Mesh();
newCurvedWall.AddComponent(MeshFilter);
newCurvedWall.AddComponent(MeshRenderer);
// make vertices
var steps : int = (ea - sa) / 15;
var cnt : int = 0;
var rads : float = 0.0;
var verts : Vector3[] = new Vector3[(steps+1)*4];
var tris : int[] = new int[12+((steps)*24)]; // 4 for ends and 8 per step X 3
for (var i = 0 ; i < (steps + 1); i++) {
rads = ((i * 15) * Mathf.Deg2Rad);
verts[cnt] = Vector3(Mathf.Cos(rads)*r1, btm + ht, Mathf.Sin(rads)*r1); cnt++;
verts[cnt] = Vector3(Mathf.Cos(rads)*r2, btm + ht, Mathf.Sin(rads)*r2); cnt++;
verts[cnt] = Vector3(Mathf.Cos(rads)*r1, btm, Mathf.Sin(rads)*r1); cnt++;
verts[cnt] = Vector3(Mathf.Cos(rads)*r2, btm, Mathf.Sin(rads)*r2); cnt++;
}
newMesh.vertices = verts;
// make uvs ?
var uvs : Vector2[] = new Vector2[newMesh.vertices.Length];
for (i = 0 ; i < uvs.Length; i++) {
uvs <em>= Vector2 (newMesh.vertices_.x, newMesh.vertices*.z);*_</em>
<em>_*}*_</em>
<em>_*newMesh.uv = uvs;*_</em>
<em>_*// make triangles*_</em>
<em>_*cnt = 0;*_</em>
<em>_*tris[cnt] = 0; cnt++; tris[cnt] = 1; cnt++; tris[cnt] = 2; cnt++; //start edge 1*_</em>
<em>_*tris[cnt] = 1; cnt++; tris[cnt] = 3; cnt++; tris[cnt] = 2; cnt++; //start edge 2*_</em>
<em>_*for (i = 0 ; i < (steps); i++) {*_</em>
<em><em>_tris[cnt] = i*4; cnt++; tris[cnt] = (i*4)+6; cnt++; tris[cnt] = (i*4)+4; cnt++; //inner 1_</em></em>
<em><em>_tris[cnt] = i*4; cnt++; tris[cnt] = (i*4)+2; cnt++; tris[cnt] = (i*4)+6; cnt++; //inner 2_</em></em>
<em><em>_tris[cnt] = i*4; cnt++; tris[cnt] = (i*4)+4; cnt++; tris[cnt] = (i*4)+5; cnt++; //top 1_</em></em>
<em><em>_tris[cnt] = i*4; cnt++; tris[cnt] = (i*4)+5; cnt++; tris[cnt] = (i*4)+1; cnt++; //top 2_</em></em>
<em><em>_tris[cnt] = (i*4)+1; cnt++; tris[cnt] = (i*4)+5; cnt++; tris[cnt] = (i*4)+7; cnt++; //outer 1_</em></em>
<em><em>_tris[cnt] = (i*4)+1; cnt++; tris[cnt] = (i*4)+7; cnt++; tris[cnt] = (i*4)+3; cnt++; //outer 2_</em></em>
<em><em>_tris[cnt] = (i*4)+2; cnt++; tris[cnt] = (i*4)+7; cnt++; tris[cnt] = (i*4)+6; cnt++; //bottom 1_</em></em>
<em><em>_tris[cnt] = (i*4)+2; cnt++; tris[cnt] = (i*4)+3; cnt++; tris[cnt] = (i*4)+7; cnt++; //bottom 2_</em></em>
<em>_*}*_</em>
<em><em>_tris[cnt] = (steps*4); cnt++; tris[cnt] = (steps*4)+2; cnt++; tris[cnt] = (steps*4)+1; cnt++; //last edge 1_</em></em>
<em><em>_tris[cnt] = (steps*4)+2; cnt++; tris[cnt] = (steps*4)+3; cnt++; tris[cnt] = (steps*4)+1; cnt++; //last edge 2_</em></em>
<em>_*newMesh.triangles = tris;*_</em>
<em>_*newMesh.RecalculateNormals();*_</em>
<em>_*newCurvedWall.GetComponent(MeshFilter).mesh = newMesh;*_</em>
<em>_*if (curveMaterial) newCurvedWall.renderer.material = curveMaterial;*_</em>
<em>_*newCurvedWall.AddComponent(MeshCollider);*_</em>
<em>_*}*_</em>
<em>_*```*_</em>