如何获得父游戏对象的大小?

Mic*_*yes 7 unity-game-engine

我有三个儿童游戏对象(如下图所示,红色,粉红色蓝色).他们是父游戏对象Green的孩子.

我不知道,如何计算Parent(Green)GameObject的大小?

我在运行时使用以下代码创建所有这些游戏对象:

GameObject CreatePattern(int difficultyLevel)    
    {    
        GameObject gameObjectTemp = new GameObject();    
        SinglePattern singlePattern;    
        gameObjectTemp = (GameObject) Instantiate(gameObjectTemp);   


        singlePattern = freeRunDataHandler.GetSinglePatternRandom(1);    
        GameObject gameObjectSingleObject = null;    
        foreach (SingleObject singleObject in singlePattern.singleObjectList)    
        {
                gameObjectSingleObject = GetGameObjectByCategory(singleObject.catergory, singleObject.type);

            if (gameObjectSingleObject != null)    
            {    
                gameObjectSingleObject = (GameObject) Instantiate(gameObjectSingleObject, new Vector3(singleObject.positionX, singleObject.positionY, singleObject.positionZ), Quaternion.identity);    
                gameObjectSingleObject.transform.localScale = new Vector3(singleObject.length, 1, singleObject.width);    
                gameObjectSingleObject.transform.parent = gameObjectTemp.transform;    
            }    
        }        

        return gameObjectTemp;    
    }
Run Code Online (Sandbox Code Playgroud)

此函数在添加所有子项后返回父(绿色)gameObject.我的父母(绿色)没有任何附加功能,甚至没有任何组件(BoxCollider,MeshFilter,MeshRenderer等).

我已经附加了BoxCollider,MeshRenderer和MeshFilter(仅供测试)并且我尝试过父母:

parent.collider.bounds.size.x  ----- > box collider
parent.renderer.bounds.size.x  ----- > mesh renderer
Run Code Online (Sandbox Code Playgroud)

但没有任何作用.在案例中返回1或0.请帮助我如何获得父(绿色)GameObject的大小?

在此输入图像描述

Jer*_*dak 28

大小你的意思是界限?如果是这样,它应该比你做的简单得多.我的代码未经测试,我没有Unity方便,但这应该工作.它假定"父"是层次结构中的游戏对象,并且在层次结构中它下面有"子".

Bounds bounds = parent.renderer.bounds;
foreach (Transform child in parent.transform)
{
    bounds.encapsulate(child.gameObject.renderer.bounds);
}
Run Code Online (Sandbox Code Playgroud)

更新:

或者,如果您不希望父级具有渲染器:

// First find a center for your bounds.
Vector3 center = Vector3.zero;

foreach (Transform child in parent.transform)
{
    center += child.gameObject.renderer.bounds.center;   
}
center /= parent.transform.childCount; //center is average center of children

//Now you have a center, calculate the bounds by creating a zero sized 'Bounds', 
Bounds bounds = new Bounds(center,Vector3.zero); 

foreach (Transform child in parent.transform)
{
    bounds.encapsulate(child.gameObject.renderer.bounds);   
}
Run Code Online (Sandbox Code Playgroud)

您提到不想使用父/子层次结构.如果你没有走那条路,你需要将"children"添加到某种数组中,或者你必须使用GameObject.Find()方法按名称查找每个子节点.如果你命名为"child_1","child_2"之类的东西,你可以很容易地查找它们,但简单地创建一个父对象就简单得多了.