private void subdivide() { Vector3 p1 = Vertices.ElementAt(0); Vector3 p2 = Vertices.ElementAt(1); Vector3 p3 = Vertices.ElementAt(2); Vector3 middlepoint1 = calculateMiddlepoint(p1, p2); Vector3 middlepoint2 = calculateMiddlepoint(p2, p3); Vector3 middlepoint3 = calculateMiddlepoint(p3, p1); List <List <Vector3> > subNodes = new List <List <Vector3> > () { new List <Vector3> () { p1, middlepoint1, middlepoint3 }, new List <Vector3> () { p2, middlepoint2, middlepoint1 }, new List <Vector3> () { p3, middlepoint3, middlepoint2 }, new List <Vector3> () { middlepoint1, middlepoint2, middlepoint3 } }; children = subNodes.ConvertAll(vertices => { String gameObjectName = generateNodeName(vertices); GameObject go = new GameObject(gameObjectName, typeof(Node), typeof(MeshRenderer), typeof(MeshFilter), typeof(MeshCollider)); go.transform.parent = gameObject.transform; go.GetComponent <Node> ().Depth = gameObject.GetComponent <Node> ().Depth + 1; go.GetComponent <Node> ().Vertices = vertices; go.GetComponent <Node> ().Parent = gameObject; go.GetComponent <MeshFilter> ().mesh.vertices = Vertices .ConvertAll(vertex => vertex.normalized * 100) .ToArray(); go.GetComponent <MeshFilter> ().mesh.triangles = new int[] { 0, 1, 2 }; go.GetComponent <MeshFilter> ().mesh.RecalculateNormals(); go.GetComponent <MeshCollider>().sharedMesh = go.GetComponent <MeshFilter> ().mesh; gameObject.GetComponent <MeshRenderer>().enabled = false; return(go); }); }