从多个BoxCollider2D中计算总区域的高度和宽度

3

我在一个父物体下有多个子物体,这些子物体上都有BoxCollider2D。

enter image description here

我需要知道盒子碰撞器的总高度和总宽度。
在“Start()”期间,我循环遍历每个子组件,读取盒子碰撞器的大小,并将其添加到名为“totalSize”的Vector2属性中。
private Vector2 totalSize;

foreach (Transform child in transform)
{
    var col = child.GetComponent<BoxCollider2D>();
    if(col != null)
        totalSize += new Vector2(col.bounds.size.x, col.bounds.size.y);
}

然而,这会计算所有对象,给我220 x 100,而不是像图片中的示例那样给我100 x 50。每个灰色框代表一个BoxCollider2D。
如何找到真实的区域高度和宽度,考虑到每个“盒子”可以具有不同的大小或不同的配置。
1个回答

1
尝试以下代码。它应该能够找到所有子元素边界的总大小。
private Vector2 totalSize;

private float minX = Mathf.Infinity;
private float maxX = -Mathf.Infinity;
private float minY = Mathf.Infinity;
private float maxY = -Mathf.Infinity;

foreach (Transform child in transform)
{
    var col = child.GetComponent<BoxCollider2D>();
    if(col != null){
        if(col.bounds.max.x > maxX) maxX = col.bounds.max.x;
        if(col.bounds.min.x < minX) minX = col.bounds.min.x;

        if(col.bounds.max.y > maxY) maxY = col.bounds.max.y;
        if(col.bounds.min.y < minY) minY = col.bounds.min.y;
    }
}
totalSize = new Vector2(maxX-minX, maxY-minY);

1
不必编辑此内容,但我想补充另一种处理 if (abc<xyz) xyz = abc; 类型行的方法是使用 xyz = Mathf.Min(abc,xyz); - Ruzihm
1
从任何一个 BoxCollider2D.Bounds 开始,也可以使用 Bounds.Encapsulate(Bounds)。https://docs.unity3d.com/ScriptReference/Bounds.Encapsulate.html - yes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接