usingUnityEngine;usingUnityEditor;usingOgxd;publicclassBlenderPostProcessor:AssetPostprocessor{voidOnPostprocessModel(GameObjectgameObject){gameObject.transform.localEulerAngles=Vector3.zero;gameObject.transform.localScale=Vector3.one;vargameObjects=GetChildrenRecursive(gameObject);gameObjects.Add(gameObject);foreach(GameObjectcurrentingameObjects){processMesh(current);setMaterial(current);}}privatevoidsetMaterial(GameObjectgameObject){Material[]materials=GetMaterials(gameObject);for(inti=0;i<materials.Length;i++){materials[i]=Resources.Load<Material>("VertexColorStandard");}gameObject.GetComponent<Renderer>().sharedMaterials=materials;}privatevoidprocessMesh(GameObjectgameObject){Meshmesh=GetMesh(gameObject);if(!mesh)return;// Invert Y and Zvarvertices=mesh.vertices;for(inti=0;i<vertices.Length;i++){vertices[i]=newVector3(vertices[i].x,vertices[i].z,vertices[i].y);}mesh.vertices=vertices;// Invert 2rd indice with 3rdvarindices=mesh.triangles;for(inti=0;i<indices.Length;i+=3){intswap=indices[i+2];indices[i+2]=indices[i+1];indices[i+1]=swap;}mesh.triangles=indices;mesh.RecalculateNormals();mesh.RecalculateBounds();mesh.RecalculateTangents();}publicstaticMeshGetMesh(GameObjectgameObject){MeshFiltermeshFilter=gameObject.GetComponent<MeshFilter>();if(meshFilter)returnmeshFilter.sharedMesh;elsereturnnull;}publicstaticMaterial[]GetMaterials(GameObjectgameObject){Rendererrenderer=gameObject.GetComponent<Renderer>();if(renderer)returnrenderer.sharedMaterials;elsereturnnewMaterial[0];}publicstaticList<GameObject>GetChildrenRecursive(GameObjectgameObject){List<GameObject>gameObjects=newList<GameObject>();Queue<GameObject>queue=newQueue<GameObject>();queue.Enqueue(gameObject);while(queue.Count!=0){GameObjectcurrent=queue.Dequeue();foreach(Transformtransformincurrent.transform){queue.Enqueue(transform.gameObject);gameObjects.Add(transform.gameObject);}}returngameObjects;}}
Comments (0)
HTTPSSSH
You can clone a snippet to your computer for local editing.
Learn more.