- Home /
 
Copying the mesh, collider, and material of a procedurally generated GameObject
I have been trying to make an editor for my Minecraft-esque game. I tied writing the level information to a file, but that keep returning errors when I try to read (permission errors, apparently I need admin status to be able to read the files). So now I am trying to save the mesh (and related...) to a prefab and load the prefab using a script. Now, what I have tried so far:
     int counter = 0;
     GameObject saveChunk = new GameObject();
     saveChunk.AddComponent( "MeshFilter" );
     saveChunk.AddComponent( "MeshRenderer" );
     saveChunk.AddComponent( "MeshCollider" );
     
     for( int x = 0; x < wscript.chunks.GetLength(0); x++ )
     {
         for( int y = 0; y < wscript.chunks.GetLength(1); y++ )
         {
             for( int z = 0; z < wscript.chunks.GetLength(2); z++ )
             {
                 saveChunk.GetComponent< MeshFilter >().mesh = wscript.chunks[x, y, z].GetComponent< MeshFilter >().mesh;
                 saveChunk.GetComponent< MeshFilter >().mesh.vertices = wscript.chunks[x, y, z].GetComponent< MeshFilter >().mesh.vertices;
                 saveChunk.GetComponent< MeshFilter >().mesh.normals = wscript.chunks[x, y, z].GetComponent< MeshFilter >().mesh.normals;
                 saveChunk.GetComponent< MeshFilter >().mesh.uv = wscript.chunks[x, y, z].GetComponent< MeshFilter >().mesh.uv;
                 saveChunk.GetComponent< MeshFilter >().mesh.triangles = wscript.chunks[x, y, z].GetComponent< MeshFilter >().mesh.triangles;
                 saveChunk.GetComponent< MeshFilter >().mesh.tangents = wscript.chunks[x, y, z].GetComponent< MeshFilter >().mesh.tangents;
                 
                 saveChunk.GetComponent< MeshRenderer >().material = wscript.chunks[x, y, z].GetComponent< MeshRenderer >().material;
                 
                 MeshCollider col = saveChunk.GetComponent< MeshCollider >();
                 col = null;
                 col = wscript.chunks[x, y, z].GetComponent< MeshCollider >();
                 
                 PrefabUtility.CreatePrefab( "Assets/SavedChunks/" + filename + counter.ToString() + ".prefab", saveChunk );
                 counter++;
             }
         }
     }
 
               Explanation of the code: the level is divided into parts (chunks), that are saved to an array of objects of type Chunk (I am using prefabs). Those objects are then modeled using scripts.
What I am doing in the above snippet is creating a GameObject that will temporarily hold a copy of the Chunk object. I add the necessary components, then loop through the chunks (which are held in a multidimensional array (at the present moment, the size of the array is always 2x2x2)). I try to copy the mesh by copying every part of it (vertices, then normals, etc), then copy the material and collider. Finally, I use CreatePrefab to save the resulting object as a prefab. The problem is, the resultant prefab is always empty. I have already checked in the editor, the elements I am copying are not null, at the moment they are copied. What is happening/what can I do to fix/avoid this issue? Thank you for the help.
Your answer
 
             Follow this Question
Related Questions
Generate a highpoly sphere with mesh collider procedurally 2 Answers
Mesh Filters randomly self deleted 0 Answers
MeshCollider is not getting updated when adding vertex to mesh 1 Answer
Gather all the Meshes into 1 1 Answer
Converting a number of runtime-created prefab GameObject cube's for export 0 Answers