static string processMesh(Transform t) { StringBuilder meshString = new StringBuilder(); Terrain terrain = t.gameObject.GetComponent <Terrain>(); if (!terrain) { MeshFilter mf = t.GetComponent <MeshFilter>(); if (mf) { long idTriangleMesh; triangleMeshIds.TryGetValue(t.GetInstanceID(), out idTriangleMesh); meshString.Append(ExportToPhysXScript.MeshToString(mf.sharedMesh, idTriangleMesh)); } for (int i = 0; i < t.childCount; i++) { meshString.Append(processMesh(t.GetChild(i))); } } else { long idTriangleMesh; triangleMeshIds.TryGetValue(t.GetInstanceID(), out idTriangleMesh); Mesh m = ExportToPhysXScript.createMesh(terrain.terrainData, t.position); meshString.Append(ExportToPhysXScript.MeshToString(m, idTriangleMesh)); } return(meshString.ToString()); }
static string processTransform(Transform t, Vector3 parentGlobalPosition) { StringBuilder meshString = new StringBuilder(); Vector3 globalPosition = t.localPosition + parentGlobalPosition; Terrain terrain = t.gameObject.GetComponent <Terrain>(); if (!terrain) { MeshFilter mf = t.GetComponent <MeshFilter>(); if (mf) { int key; long idRigidStatic, idTriangleMesh, idMaterial; sharedMaterialIds.TryGetValue(t.GetInstanceID(), out key); materialIds.TryGetValue(key, out idMaterial); triangleMeshIds.TryGetValue(t.GetInstanceID(), out idTriangleMesh); rigidStaticIds.TryGetValue(t.GetInstanceID(), out idRigidStatic); meshString.Append(ExportToPhysXScript.TransformToString(t, idRigidStatic, idTriangleMesh, idMaterial, globalPosition)); } for (int i = 0; i < t.childCount; i++) { meshString.Append(processTransform(t.GetChild(i), globalPosition)); } } else { int key; long idRigidStatic, idTriangleMesh, idMaterial; sharedMaterialIds.TryGetValue(t.GetInstanceID(), out key); materialIds.TryGetValue(key, out idMaterial); triangleMeshIds.TryGetValue(t.GetInstanceID(), out idTriangleMesh); rigidStaticIds.TryGetValue(t.GetInstanceID(), out idRigidStatic); meshString.Append(ExportToPhysXScript.TransformToString(t, idRigidStatic, idTriangleMesh, idMaterial, globalPosition)); } return(meshString.ToString()); }
static string processMaterial(Transform t) { StringBuilder meshString = new StringBuilder(); Terrain terrain = t.gameObject.GetComponent <Terrain>(); if (!terrain) { MeshFilter mf = t.GetComponent <MeshFilter>(); if (mf) { if (!materialIds.ContainsKey(mf.collider.sharedMaterial.GetInstanceID())) { long idMaterial = idGenerator(); materialIds.Add(mf.collider.sharedMaterial.GetInstanceID(), idMaterial); meshString.Append(ExportToPhysXScript.MaterialToString(mf.collider.sharedMaterial, idMaterial)); } } for (int i = 0; i < t.childCount; i++) { meshString.Append(processMaterial(t.GetChild(i))); } } else { if (!materialIds.ContainsKey(terrain.terrainData.physicMaterial.GetInstanceID())) { long idMaterial = idGenerator(); materialIds.Add(terrain.terrainData.physicMaterial.GetInstanceID(), idMaterial); meshString.Append(ExportToPhysXScript.MaterialToString(terrain.terrainData.physicMaterial, idMaterial)); } } return(meshString.ToString()); }