/// <summary> /// Resize any collider components on this mesh to match the size of the mesh bounds. /// </summary> /// <param name="mesh">The mesh target to rebuild collider volumes for.</param> public static void RebuildColliders(this ProBuilderMesh mesh) { mesh.mesh.RecalculateBounds(); var bounds = mesh.mesh.bounds; foreach (var collider in mesh.GetComponents <Collider>()) { Type t = collider.GetType(); if (t == typeof(BoxCollider)) { ((BoxCollider)collider).center = bounds.center; ((BoxCollider)collider).size = bounds.size; } else if (t == typeof(SphereCollider)) { ((SphereCollider)collider).center = bounds.center; ((SphereCollider)collider).radius = Math.LargestValue(bounds.extents); } else if (t == typeof(CapsuleCollider)) { ((CapsuleCollider)collider).center = bounds.center; Vector2 xy = new Vector2(bounds.extents.x, bounds.extents.z); ((CapsuleCollider)collider).radius = Math.LargestValue(xy); ((CapsuleCollider)collider).height = bounds.size.y; } else if (t == typeof(WheelCollider)) { ((WheelCollider)collider).center = bounds.center; ((WheelCollider)collider).radius = Math.LargestValue(bounds.extents); } else if (t == typeof(MeshCollider)) { ((MeshCollider)collider).sharedMesh = null; ((MeshCollider)collider).sharedMesh = mesh.mesh; } } }