// ========================================================================= private void GenerateSinglePrism(ref Mesh mesh2D, int frontIndex2D) { int[] triangles2D = mesh2D.triangles; Vector3[] vertices2D = mesh2D.vertices; List <Vector3> vertices = new List <Vector3> { }; List <int> triangles = new List <int> { }; // select individual triangle from triangles2D with frontIndex2D // single triangle vertices in 2D coords Vector3[] triVerts2D = { vertices2D[triangles2D[frontIndex2D * 3 + 2]], vertices2D[triangles2D[frontIndex2D * 3 + 1]], vertices2D[triangles2D[frontIndex2D * 3 + 0]] }; // structure required to utilize Mattatz's circumcenter code. List <Vertex2D> triVerts2D2 = new List <Vertex2D>(); for (int i = 0; i < 3; i++) { Vector3 v3D = triVerts2D[i]; Vector2 v2D = new Vector2(v3D[0], v3D[1]); // need only x & y triVerts2D2.Add(new Vertex2D(v2D)); } Segment2D s0 = new Segment2D(triVerts2D2[0], triVerts2D2[1]); Segment2D s1 = new Segment2D(triVerts2D2[1], triVerts2D2[2]); Segment2D s2 = new Segment2D(triVerts2D2[2], triVerts2D2[0]); Triangle2D triangle2D2 = new Triangle2D(s0, s1, s2); Vector2 center2D = triangle2D2.Circumcenter(); Vector3 center = center2D; // translate triangle to place circumcenter at the origin Vector3[] triVerts2Dshifted = new Vector3[3]; for (int i = 0; i < 3; i++) { triVerts2Dshifted[i] = triVerts2D[i] - center; } AddFrontFace(vertices, triangles, triVerts2Dshifted); AddBackFace(vertices, triangles, triVerts2Dshifted); AddSideFaces(vertices, triangles, triVerts2Dshifted); Vector3 center3D = new Vector3(center2D[0], 0, center2D[1]); // Create output game object GameObject prism = new GameObject("Prism"); prism.transform.parent = gameObject.transform; prism.tag = "Prism"; // offset is location of parent. Used to set the center of the // block of prisms. Vector3 offset = gameObject.transform.position; // center3D (above) is the circumcenter of the triangle from which the // prism is constructed. prism.transform.position = center3D + offset; prism.AddComponent <MeshFilter>(); prism.AddComponent <MeshRenderer>(); //prism.AddComponent<FloatScalingEffect>(); // Added scaling animation Mesh mesh = prism.GetComponent <MeshFilter>().mesh; mesh.vertices = vertices.ToArray(); mesh.triangles = triangles.ToArray(); //mesh.uv = new Vector2[] // { new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1) }; mesh.RecalculateNormals(); mesh.RecalculateBounds(); // now that we have the mesh setup, we can add colliders. prism.AddComponent <MeshCollider>(); prism.GetComponent <MeshCollider>().convex = true; prism.AddComponent <PrismImpact>(); prism.AddComponent <PrismMoveInterface>(); prism.GetComponent <MeshRenderer>().material = mat; }