- 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