Unity-如何获取父游戏对象中心的位置

时间:2018-10-19 20:29:38

标签: c# unity3d

我有一个问题,关于如何获取通过将子对象添加到父对象而创建的转换。通过看下面的图片,更容易理解我的意思。 Tranform 。我知道父母的世界位置实际上是0,但如何获得显示的位置?

最好的问候

2 个答案:

答案 0 :(得分:2)

一些信息,首先。该位置就是该Center的{​​{1}}所在的位置。在GameObject处放置句柄的另一种方法是将句柄与Pivot放在同一位置。您可以在Unity编辑器中在这两种手柄显示模式之间切换。

因此,您想找到Transform.position手柄的位置。这取决于父母是否有Center

在您的情况下,父对象没有Renderer,则必须进入gameObject的子对象并平均其变换位置:

Renderer

如果情况稍有不同,并且父游戏对象具有Vector3 sumVector = new Vector3(0f,0f,0f); foreach (Transform child in parentObject.transform) { sumVector += child.position; } Vector3 groupCenter = sumVector / parentObject.transform.childCount; ,则容易得多:

Renderer

答案 1 :(得分:1)

我遇到了同样的问题。感谢@Ruzihm 的回答。 我想制作中心,但不知道对象是否有'Renderer',所以我写了这样的递归函数来获取对象的中心位置。

Vector3 getCenter(Transform obj)
{
    Vector3 center = new Vector3();
    if (obj.GetComponent<Renderer>() != null)
    {
        center = obj.GetComponent<Renderer>().bounds.center;
    }
    else
    {
        foreach (Transform subObj in obj)
        {
            center += getCenter(subObj);
        }
        center /= obj.childCount;
    }
    return center;
}