using UnityEngine; namespace BITKit.Physics { public static class PhysicsUtils { public static void FixCollidersBound(params Transform[] transforms) { foreach (var transform in transforms) { // 获取或创建 BoxCollider 组件 var boxCollider = transform.GetComponent(); if (boxCollider == null) { continue; } // 获取所有可见的 MeshRenderer 组件 var meshRenderers = transform.GetComponentsInChildren(); if (meshRenderers.Length == 0) { Debug.LogWarning("No MeshRenderer components found in children."); return; } // 初始化包围盒,以第一个 MeshRenderer 的包围盒为基准 Bounds bounds = new Bounds(transform.transform.InverseTransformPoint(meshRenderers[0].bounds.center), transform.transform.InverseTransformVector(meshRenderers[0].bounds.size)); // 遍历所有 MeshRenderer,合并包围盒 for (int i = 1; i < meshRenderers.Length; i++) { Bounds localBounds = meshRenderers[i].bounds; Vector3 localCenter = transform.transform.InverseTransformPoint(localBounds.center); Vector3 localSize = transform.transform.InverseTransformVector(localBounds.size); bounds.Encapsulate(new Bounds(localCenter, localSize)); } // 设置 BoxCollider 的中心和大小 boxCollider.center = bounds.center; boxCollider.size = bounds.size; } } } }