2017-07-07 411 views
1

我在Unity中创建一个2D块堆叠游戏,您可以从x轴平移spawner对象实例化块。我面临的问题是当堆栈太高而靠近产卵器时,我需要在Y轴上移动产卵器和游戏摄像机。我正在测量一堆预制器,以便使用Bounds来获得它们的高度我知道何时移动我的相机和spawner。我面临的问题是当我打电话给我的GetMaxBounds函数并封装它不会添加到我的parentBounds变量的附加点。我的parentBounds.max.y永远不会增加。我是编程和C#的新手。提前致谢。Unity3D - 如何测量一堆物体的高度?

Game view

if (Input.GetMouseButtonDown(0)) { 
     Instantiate (fallingBrick, spawnPosObj.transform.position, Quaternion.identity, parentStack.transform); 
     var parentBounds = GetMaxBounds (parentStack); 
     Debug.Log (parentBounds.max.y); 
    } 

} 

Bounds GetMaxBounds(GameObject g) { 
    var b = new Bounds(g.transform.position, Vector3.zero); 
    foreach (Renderer r in g.GetComponentsInChildren<Renderer>()) { 
     b.Encapsulate(r.bounds); 
    } 
    return b; 
} 
+4

只需在堆叠中添加单个物体的高度即可。 –

+0

谢谢。问题是他们并不总是均匀堆叠。有时会跌倒,旋转并最终落在不同的高度。 – Lewie

+0

你是否在做任何检查,如果块被堆放在塔上?如果是这样,你可以遍历每个成功堆积的物体并乘以单个块的高度。 –

回答

3

保留一个计数器将存储在堆栈中有多少对象是在屏幕上呈现,每一个项目在您的堆栈增加的时间增加了。然后,考虑到您节省了一件物品的尺寸,您只需将您的尺寸乘以堆叠物品的数量即可。只需将此大小与场景的当前垂直大小进行比较,并在堆叠达到屏幕垂直大小的80%时移动相机。

当你这样做的时候,记得要重置物品的数量,因为你可能会移动你的相机,并且堆叠中较低级别的大部分物品都将被隐藏。例如,如果移动相机时只显示3个立方体,请将堆叠中的项目数量设置为3.

由于您的问题似乎包含不会以相同方式堆叠的对象,因此另一解决方案是使用Bounds。想象一下,您将保留堆栈中所有项目的列表,您可以评估将添加到代表堆栈的父对象中的每个对象的边界,并通过封装每个子边界来评估垂直大小。您可以在this answer找到一个例子:

Bounds GetMaxBounds(GameObject stack) { 
    var b = new Bounds(stack.transform.position, Vector3.zero); 
    foreach (Renderer r in g.GetComponentsInChildren<Renderer>()) { 
    b.Encapsulate(r.bounds); 
    } 
    return b; 
} 

然后你就可以通过评估Bounds对象max Y值从其减去至min Y值评估垂直尺寸。所以,你可以有类似:

float GetVerticalSize(GameObject stack) { 
    var b = new Bounds(stack.transform.position, Vector3.zero); 
    foreach (Renderer r in g.GetComponentsInChildren<Renderer>()) { 
    b.Encapsulate(r.bounds); 
    } 

    float size = b.max.y - b.min.y; 
    return size; 
} 

同样,如果你正在你的相机时,请确保只使用在其上的屏幕实际显示的项目这一解决方案。

+0

谢谢,这是有道理的。问题是堆栈增量并不总是一个高度。有时他们会跌倒并旋转,最终在下面的平台上混乱。在这种情况下有没有办法衡量?我可以缩小平台并使其能够使块只能逐个垂直堆叠,然后使用此方法。 – Lewie

+0

如果他正在存储所有成功堆叠的块,他应该仍然能够将单个块的大小和未成功堆积的块的大小相乘。 –

+0

@Lewie我为你的情况提出了另一种解决方案。 – Isuka