Mitu217
3/4/2016 - 6:08 AM

gistfile1.txt

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