private static void ConvertMeshToColliders(GameObject gameObject, string location = null, bool setConvex = true) { MeshFilter[] meshFilters = gameObject.GetComponentsInChildren <MeshFilter>(); if (UrdfRobotExtensions.importsettings.convexMethod == ImportSettings.convexDecomposer.unity) { foreach (MeshFilter meshFilter in meshFilters) { GameObject child = meshFilter.gameObject; MeshCollider meshCollider = child.AddComponent <MeshCollider>(); meshCollider.sharedMesh = meshFilter.sharedMesh; meshCollider.convex = setConvex; Object.DestroyImmediate(child.GetComponent <MeshRenderer>()); Object.DestroyImmediate(meshFilter); } } else { string templateFileName = ""; string filePath = ""; int meshIndex = 0; if (!RuntimeUrdf.IsRuntimeMode() && location != null) { string meshFilePath = UrdfAssetPathHandler.GetRelativeAssetPathFromUrdfPath(location, false); templateFileName = Path.GetFileNameWithoutExtension(meshFilePath); filePath = Path.GetDirectoryName(meshFilePath); } foreach (MeshFilter meshFilter in meshFilters) { GameObject child = meshFilter.gameObject; VHACD decomposer = child.AddComponent <VHACD>(); List <Mesh> colliderMeshes = decomposer.GenerateConvexMeshes(meshFilter.sharedMesh); foreach (Mesh collider in colliderMeshes) { if (!RuntimeUrdf.IsRuntimeMode()) { meshIndex++; string name = $"{filePath}/{templateFileName}_{meshIndex}.asset"; Debug.Log($"Creating new mesh file: {name}"); RuntimeUrdf.AssetDatabase_CreateAsset(collider, name); RuntimeUrdf.AssetDatabase_SaveAssets(); } MeshCollider current = child.AddComponent <MeshCollider>(); current.sharedMesh = collider; current.convex = setConvex; } Component.DestroyImmediate(child.GetComponent <VHACD>()); Object.DestroyImmediate(child.GetComponent <MeshRenderer>()); Object.DestroyImmediate(meshFilter); } } }
private static void ConvertCylinderToCollider(MeshFilter filter) { GameObject go = filter.gameObject; var collider = filter.sharedMesh; // Only create an asset if not runtime import if (!RuntimeUrdf.IsRuntimeMode()) { var packageRoot = UrdfAssetPathHandler.GetPackageRoot(); var filePath = RuntimeUrdf.AssetDatabase_GUIDToAssetPath(RuntimeUrdf.AssetDatabase_CreateFolder($"{packageRoot}", "meshes")); var name = $"{filePath}/Cylinder.asset"; Debug.Log($"Creating new cylinder file: {name}"); RuntimeUrdf.AssetDatabase_CreateAsset(collider, name, uniquePath: true); RuntimeUrdf.AssetDatabase_SaveAssets(); } MeshCollider current = go.AddComponent <MeshCollider>(); current.sharedMesh = collider; current.convex = true; Object.DestroyImmediate(go.GetComponent <MeshRenderer>()); Object.DestroyImmediate(filter); }