Skip to content

Instantly share code, notes, and snippets.

@mitu217
Created March 4, 2016 06:08
Show Gist options
  • Save mitu217/d19ebf77f2dff5edc94b to your computer and use it in GitHub Desktop.
Save mitu217/d19ebf77f2dff5edc94b to your computer and use it in GitHub Desktop.
private Mesh CreateBlockMesh(GameObject cc, Vector3 centerPos) {
Vector3[] v = new Vector3[4];
/**********
* 表面
* ********/
int[] use_vertices1 = new int[4];
v[0] = centerPos + Vector3.up * 0.5f + Vector3.right * 0.5f;
v[1] = centerPos + Vector3.up * 0.5f + Vector3.left * 0.5f;
v[2] = centerPos + Vector3.down * 0.5f + Vector3.left * 0.5f;
v[3] = centerPos + Vector3.down * 0.5f + Vector3.right * 0.5f;
//verticesの登録
for (int i = 0; i < 4; i++) {
int index = SearchVertex (v [i]);
if (index == -1) {
cc.GetComponent<CubeCore> ().AddHaveVerticesCount ();
vertices.Add (v [i]);
if (SearchVertex (v [i] + Vector3.down) != -1) {
uvs.Add (new Vector2 (uvs [SearchVertex (v [i] + Vector3.down)].x, uvs [SearchVertex (v [i] + Vector3.down)].y + 1));
} else if (SearchVertex (v [i] + Vector3.up) != -1) {
uvs.Add (new Vector2 (uvs [SearchVertex (v [i] + Vector3.up)].x, uvs [SearchVertex (v [i] + Vector3.up)].y - 1));
} else if (SearchVertex (v [i] + Vector3.left) != -1) {
uvs.Add (new Vector2 (uvs [SearchVertex (v [i] + Vector3.left)].x + 1, uvs [SearchVertex (v [i] + Vector3.left)].y));
} else if (SearchVertex (v [i] + Vector3.right) != -1) {
uvs.Add (new Vector2 (uvs [SearchVertex (v [i] + Vector3.right)].x - 1, uvs [SearchVertex (v [i] + Vector3.right)].y));
} else {
uvs.Add (new Vector2 (0, 0));
}
use_vertices1 [i] = vertices.Count - 1;
} else {
use_vertices1[i] = index;
}
}
//trianglesの登録
triangles.Add (use_vertices1 [0]);
triangles.Add (use_vertices1 [2]);
triangles.Add (use_vertices1 [1]);
triangles.Add (use_vertices1 [0]);
triangles.Add (use_vertices1 [3]);
triangles.Add (use_vertices1 [2]);
/**********
* 表面
* ********/
int[] use_vertices2 = new int[4];
v[0] = centerPos + Vector3.up * 0.5f + Vector3.right * 0.5f + Vector3.forward;
v[1] = centerPos + Vector3.up * 0.5f + Vector3.left * 0.5f + Vector3.forward;
v[2] = centerPos + Vector3.down * 0.5f + Vector3.left * 0.5f + Vector3.forward;
v[3] = centerPos + Vector3.down * 0.5f + Vector3.right * 0.5f + Vector3.forward;
//verticesの登録
for (int i = 0; i < 4; i++) {
int index = SearchVertex (v [i]);
if (index == -1) {
cc.GetComponent<CubeCore> ().AddHaveVerticesCount ();
vertices.Add (v [i]);
use_vertices2 [i] = vertices.Count - 1;
uvs.Add (new Vector2 (0, 0));
} else {
use_vertices2 [i] = index;
}
}
//trianglesの登録
triangles.Add (use_vertices2 [0]);
triangles.Add (use_vertices2 [1]);
triangles.Add (use_vertices2 [2]);
triangles.Add (use_vertices2 [0]);
triangles.Add (use_vertices2 [2]);
triangles.Add (use_vertices2 [3]);
//側面
triangles.Add (use_vertices1 [0]);
triangles.Add (use_vertices2 [0]);
triangles.Add (use_vertices2 [3]);
triangles.Add (use_vertices2 [3]);
triangles.Add (use_vertices1 [3]);
triangles.Add (use_vertices1 [0]);
triangles.Add (use_vertices1 [0]);
triangles.Add (use_vertices2 [1]);
triangles.Add (use_vertices2 [0]);
triangles.Add (use_vertices2 [1]);
triangles.Add (use_vertices1 [0]);
triangles.Add (use_vertices1 [1]);
triangles.Add (use_vertices2 [2]);
triangles.Add (use_vertices2 [1]);
triangles.Add (use_vertices1 [2]);
triangles.Add (use_vertices1 [1]);
triangles.Add (use_vertices1 [2]);
triangles.Add (use_vertices2 [1]);
triangles.Add (use_vertices2 [3]);
triangles.Add (use_vertices2 [2]);
triangles.Add (use_vertices1 [2]);
triangles.Add (use_vertices1 [2]);
triangles.Add (use_vertices1 [3]);
triangles.Add (use_vertices2 [3]);
Mesh mesh = new Mesh ();
mesh.vertices = vertices.ToArray();
mesh.triangles = triangles.ToArray();
mesh.uv = uvs.ToArray ();
mesh.RecalculateNormals();
mesh.RecalculateBounds();
return mesh;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment