사실 사용하는 버텍스 배열만 바꾸고 코드 복붙 노가다였음
계단도 결국 육면체 두개가 위아래로 붙어있는 구조니깐 큐브를 생성하는 규칙에 맞춰서 사용되는 버텍스만 바꿔주면 됨
public void AddStair(List<Vector3> vertices, List<int> triangles, List<Vector4> uvs, List<Vector4> uv2, Block block, Vector3 pos)
{
Vector3[] stairVertices;
if (Mathf.Approximately(block.value, 0))
stairVertices = this.stairVertices;
else if (Mathf.Approximately(block.value, 1))
stairVertices = this.stairVerticesXP;
else if (Mathf.Approximately(block.value, 2))
stairVertices = this.stairVerticesZM;
else
stairVertices = this.stairVerticesXM;
//아랫쪽
//위
int ind = vertices.Count;
vertices.Add(pos + stairVertices[4]);
vertices.Add(pos + stairVertices[5]);
vertices.Add(pos + stairVertices[6]);
vertices.Add(pos + stairVertices[7]);
AddStairTexture(uvs, uv2, 0, block.ID);
triangles.Add(ind);
triangles.Add(ind + 2);
triangles.Add(ind + 1);
triangles.Add(ind + 2);
triangles.Add(ind + 3);
triangles.Add(ind + 1);
//아래
ind = vertices.Count;
vertices.Add(pos + stairVertices[2]);
vertices.Add(pos + stairVertices[3]);
vertices.Add(pos + stairVertices[0]);
vertices.Add(pos + stairVertices[1]);
AddStairTexture(uvs, uv2, 1, block.ID);
triangles.Add(ind);
triangles.Add(ind + 2);
triangles.Add(ind + 1);
triangles.Add(ind + 2);
triangles.Add(ind + 3);
triangles.Add(ind + 1);
//x+
ind = vertices.Count;
vertices.Add(pos + stairVertices[1]);
vertices.Add(pos + stairVertices[3]);
vertices.Add(pos + stairVertices[5]);
vertices.Add(pos + stairVertices[7]);
AddStairTexture(uvs, uv2, 2, block.ID);
triangles.Add(ind);
triangles.Add(ind + 2);
triangles.Add(ind + 1);
triangles.Add(ind + 2);
triangles.Add(ind + 3);
triangles.Add(ind + 1);
//x-
ind = vertices.Count;
vertices.Add(pos + stairVertices[2]);
vertices.Add(pos + stairVertices[0]);
vertices.Add(pos + stairVertices[6]);
vertices.Add(pos + stairVertices[4]);
AddStairTexture(uvs, uv2, 3, block.ID);
triangles.Add(ind);
triangles.Add(ind + 2);
triangles.Add(ind + 1);
triangles.Add(ind + 2);
triangles.Add(ind + 3);
triangles.Add(ind + 1);
//z+
ind = vertices.Count;
vertices.Add(pos + stairVertices[3]);
vertices.Add(pos + stairVertices[2]);
vertices.Add(pos + stairVertices[7]);
vertices.Add(pos + stairVertices[6]);
AddStairTexture(uvs, uv2, 4, block.ID);
triangles.Add(ind);
triangles.Add(ind + 2);
triangles.Add(ind + 1);
triangles.Add(ind + 2);
triangles.Add(ind + 3);
triangles.Add(ind + 1);
//z-
ind = vertices.Count;
vertices.Add(pos + stairVertices[0]);
vertices.Add(pos + stairVertices[1]);
vertices.Add(pos + stairVertices[4]);
vertices.Add(pos + stairVertices[5]);
AddStairTexture(uvs, uv2, 5, block.ID);
triangles.Add(ind);
triangles.Add(ind + 2);
triangles.Add(ind + 1);
triangles.Add(ind + 2);
triangles.Add(ind + 3);
triangles.Add(ind + 1);
//윗쪽
//위
ind = vertices.Count;
vertices.Add(pos + stairVertices[8 + 4]);
vertices.Add(pos + stairVertices[8 + 5]);
vertices.Add(pos + stairVertices[8 + 6]);
vertices.Add(pos + stairVertices[8 + 7]);
AddStairTexture(uvs, uv2, 6, block.ID);
triangles.Add(ind);
triangles.Add(ind + 2);
triangles.Add(ind + 1);
triangles.Add(ind + 2);
triangles.Add(ind + 3);
triangles.Add(ind + 1);
//아래
ind = vertices.Count;
vertices.Add(pos + stairVertices[8 + 2]);
vertices.Add(pos + stairVertices[8 + 3]);
vertices.Add(pos + stairVertices[8 + 0]);
vertices.Add(pos + stairVertices[8 + 1]);
AddStairTexture(uvs, uv2, 7, block.ID);
triangles.Add(ind);
triangles.Add(ind + 2);
triangles.Add(ind + 1);
triangles.Add(ind + 2);
triangles.Add(ind + 3);
triangles.Add(ind + 1);
//x+
ind = vertices.Count;
vertices.Add(pos + stairVertices[8 + 1]);
vertices.Add(pos + stairVertices[8 + 3]);
vertices.Add(pos + stairVertices[8 + 5]);
vertices.Add(pos + stairVertices[8 + 7]);
AddStairTexture(uvs, uv2, 8, block.ID);
triangles.Add(ind);
triangles.Add(ind + 2);
triangles.Add(ind + 1);
triangles.Add(ind + 2);
triangles.Add(ind + 3);
triangles.Add(ind + 1);
//x-
ind = vertices.Count;
vertices.Add(pos + stairVertices[8 + 2]);
vertices.Add(pos + stairVertices[8 + 0]);
vertices.Add(pos + stairVertices[8 + 6]);
vertices.Add(pos + stairVertices[8 + 4]);
AddStairTexture(uvs, uv2, 9, block.ID);
triangles.Add(ind);
triangles.Add(ind + 2);
triangles.Add(ind + 1);
triangles.Add(ind + 2);
triangles.Add(ind + 3);
triangles.Add(ind + 1);
//z+
ind = vertices.Count;
vertices.Add(pos + stairVertices[8 + 3]);
vertices.Add(pos + stairVertices[8 + 2]);
vertices.Add(pos + stairVertices[8 + 7]);
vertices.Add(pos + stairVertices[8 + 6]);
AddStairTexture(uvs, uv2, 10, block.ID);
triangles.Add(ind);
triangles.Add(ind + 2);
triangles.Add(ind + 1);
triangles.Add(ind + 2);
triangles.Add(ind + 3);
triangles.Add(ind + 1);
//z-
ind = vertices.Count;
vertices.Add(pos + stairVertices[8 + 0]);
vertices.Add(pos + stairVertices[8 + 1]);
vertices.Add(pos + stairVertices[8 + 4]);
vertices.Add(pos + stairVertices[8 + 5]);
AddStairTexture(uvs, uv2, 11, block.ID);
triangles.Add(ind);
triangles.Add(ind + 2);
triangles.Add(ind + 1);
triangles.Add(ind + 2);
triangles.Add(ind + 3);
triangles.Add(ind + 1);
}
잘했긴 한데 이런건 함수로 만들어서 쓰자