- Home /
Change mesh translation for future placements
Hi,
I have an object that I imported with several meshes. Some of them have nontrivial translations, and I would like to bake those translations in. The code I wrote was this :
private static void NormalizeMesh(MeshFilter mf) { Transform transform = mf.transform; if (transform.localPosition != Vector3.zero || transform.localRotation != Quaternion.identity || transform.localScale != Vector3.one) { Vector3[] vertices = mf.sharedMesh.vertices; Vector3[] normals = mf.sharedMesh.normals; for (int i = 0; i < mf.sharedMesh.vertexCount; i++) { vertices[i] = transform.TransformPoint(vertices[i]); normals[i] = transform.TransformDirection(normals[i]); //Tangents? UVs? }
mf.sharedMesh.vertices = vertices;
mf.sharedMesh.normals = normals;
mf.transform.localPosition = Vector3.zero;
mf.transform.localRotation = Quaternion.identity;
mf.transform.localScale = Vector3.one;
}
I want to be able to do this only once per mesh, and that the next time that I add the object to the scene hierarchy it will already be fixed. The code that I wrote takes care of the mesh for good, but it only takes care of the translation for the instance that I added. This is because the sharedMesh gets saved back to the model, but the changes to the mesh filter don't get changed - the next time I will add the model, the vertices will be baked but the transform will remain the original one.
Is there a way to modify the mesh's transform for future insertions into the scene?
Answer by Paulius-Liekis · Sep 21, 2010 at 07:12 AM
Call your function in AssetPostprocessor.OnPostprocessModel and modify the shared mesh.
Answer by StephanK · Sep 20, 2010 at 04:06 PM
You could save it as a prefab at the end of your script.
The problem with that is that it is still possible to add the normalized mesh with the un-zeroed transformed afterwards, and the script will run again and transform the already transformed vertices.
If what I want to do is impossible, I'll try to solve the issue in the exporting software ins$$anonymous$$d.
Your answer
Follow this Question
Related Questions
Apply materials to imported meshes 0 Answers
Assigning imported mesh from script 1 Answer
Terrain detail meshes have wrong orientation 0 Answers
"Mesh indices out of range" when using ObjExporter 0 Answers
FBX import scale factor issue 1 Answer