我有三个儿童游戏对象(如下图所示,红色,粉红色和蓝色).他们是父游戏对象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"之类的东西,你可以很容易地查找它们,但简单地创建一个父对象就简单得多了.
| 归档时间: |
|
| 查看次数: |
21817 次 |
| 最近记录: |