public void GenerateMesh(GameObject planet, PolySet terrianPolys, string name, Material material) { GameObject meshObject = new GameObject(name); meshObject.transform.parent = planet.transform; MeshRenderer surfaceRenderer = meshObject.AddComponent <MeshRenderer>(); surfaceRenderer.material = material; Mesh terrainMesh = new Mesh(); int vertexCount = terrianPolys.Count * 3; int[] indices = new int[vertexCount]; Vector3[] vertices = new Vector3[vertexCount]; Vector3[] normals = new Vector3[vertexCount]; Color32[] colors = new Color32[vertexCount]; Vector2[] uvs = new Vector2[vertexCount]; List <Polygon> polyList = terrianPolys.ToList(); for (int i = 0; i < polyList.Count; i++) { var poly = polyList[i]; indices[i * 3 + 0] = i * 3 + 0; indices[i * 3 + 1] = i * 3 + 1; indices[i * 3 + 2] = i * 3 + 2; vertices[i * 3 + 0] = m_Vertices[poly.m_Vertices[0]]; vertices[i * 3 + 1] = m_Vertices[poly.m_Vertices[1]]; vertices[i * 3 + 2] = m_Vertices[poly.m_Vertices[2]]; uvs[i * 3 + 0] = poly.m_UVs[0]; uvs[i * 3 + 1] = poly.m_UVs[1]; uvs[i * 3 + 2] = poly.m_UVs[2]; colors[i * 3 + 0] = poly.m_Color; colors[i * 3 + 1] = poly.m_Color; colors[i * 3 + 2] = poly.m_Color; if (poly.m_SmoothNormals) { normals[i * 3 + 0] = m_Vertices[poly.m_Vertices[0]].normalized; normals[i * 3 + 1] = m_Vertices[poly.m_Vertices[1]].normalized; normals[i * 3 + 2] = m_Vertices[poly.m_Vertices[2]].normalized; } else { Vector3 ab = m_Vertices[poly.m_Vertices[1]] - m_Vertices[poly.m_Vertices[0]]; Vector3 ac = m_Vertices[poly.m_Vertices[2]] - m_Vertices[poly.m_Vertices[0]]; Vector3 normal = Vector3.Cross(ab, ac).normalized; normals[i * 3 + 0] = normal; normals[i * 3 + 1] = normal; normals[i * 3 + 2] = normal; } } terrainMesh.vertices = vertices; terrainMesh.normals = normals; terrainMesh.colors32 = colors; terrainMesh.uv = uvs; terrainMesh.SetTriangles(indices, 0); MeshFilter terrainFilter = meshObject.AddComponent <MeshFilter>(); terrainFilter.mesh = terrainMesh; //string localPath = "Assets/" + "planet" + ".asset"; // Make sure the file name is unique, in case an existing Prefab has the same name. //localPath = AssetDatabase.GenerateUniqueAssetPath(localPath); //AssetDatabase.CreateAsset(terrainMesh, localPath); //AssetDatabase.SaveAssets(); }