一、增大Bounds以便包含所有点
private static Bounds GetModelGroupBoundes(Vector3 conent,Renderer[] renderers)
{
Bounds bounds = new Bounds(conent, Vector3.zero);
foreach (var item in renderers)
{
bounds.Encapsulate(item.bounds);
}
return bounds;
}
二、获取所有模型的公共Bounds中心点
private static Vector3 GetModelGroupBoundesConent(Renderer[] renderers)
{
Vector3 conent = Vector3.zero;
for (int i = 0; i < renderers.Length; i++) conent += renderers[i].bounds.center;
conent /= renderers.Length;
return conent;
}
三、合并多个模型并添加公共BoxCollider
[MenuItem("ChivaXR/Bounds/合并多个模型的Bounds并添加公共BoxCollider")]
public static void AddBoxCollider()
{
GameObject tmpSelectObj = Selection.activeGameObject;
if (tmpSelectObj == null) return;
Renderer[] renders = tmpSelectObj.GetComponentsInChildren<Renderer>();
Vector3 conent = GetModelGroupBoundesConent(renders);
Bounds bounds = GetModelGroupBoundes(conent,renders);
var currentCollider = tmpSelectObj.GetComponent<Collider>();
if (currentCollider != null) GameObject.DestroyImmediate(currentCollider);
BoxCollider boxCollider = tmpSelectObj.AddComponent<BoxCollider>();
boxCollider.center = bounds.center - tmpSelectObj.transform.position;
boxCollider.size = bounds.size;
}