如何检查y轴上最高物体的最高点

时间:2019-11-30 11:34:12

标签: c# unity3d

我仍在使用Unity进行有关塔楼建设的游戏,现在我遇到困扰我大约一个星期的问题。

输局的游戏机制是,有一条以一定速度上升的线,并且当它超过塔顶时,游戏应该结束。我想知道是否有任何方法可以检查最高对象的最高点(由于旋转的对象和不规则堆积的对象)?

2 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点:

1)您可以从天空的高处向下射出一束射线。找到所有hit.point位置,然后遍历所有点并存储哪个建筑物最高。

2)对于添加的建筑物的每个块,另一个是-将其保留为“空建筑物”游戏对象的子级。然后,您需要做的就是查看哪个Building gameObject拥有最多的孩子,并且您知道它是最高的。假设所有块的Y大小都相同,那么您可以使用maximumChildCount * blockSizeY

轻松计算高度

3)做到这一点的另一种方法是使用直线中向上移动的点。从该点向左右发射光线。如果它撞到建筑物,则游戏继续。如果没有成功,则游戏结束。这是最简单的方法,因为它不需要计算任何高度,并且您的建筑物可以按照您喜欢的任何方式进行制作,只要它们上面有对撞机就可以使射线命中。 <---这可能是我听到你问的最好方法。

答案 1 :(得分:0)

(注意。方法的命名中可能会有一些拼写错误,因此请在粘贴粘贴之前进行校对) 由于您使用的是直线,因此您可能想要查找对象的边界框。我从未尝试过边界框方法,因此它可能无法正常工作。第二种方法使用一点数学。如果您的线是垂直的,那么找到最高点很容易。您需要做的就是找到对象的y位置,然后将y比例的一半相加以找到最高点。请注意,仅当对象的变换原点位于中心时才起作用。如果原点在该行的底部,则必须添加完整的y比例值。如果它上升三分之一,则只有y标度值的三分之二。我想你应该已经明白了。这条规则也适用于下一个条件。如果您的线是倾斜的,这会使它变得更加复杂。我们需要找到旋转线的旋转绝对值。确保线条与垂直线之间的旋转角度小于90度。此后,我们需要知道行的长度。想象一个直角三角形,直线本身是斜边,底数是直线最左边的点到直线上最右边(或其他方式)之间的距离,以及直线的最低点到直线的距离。线的最高点是三角形的实际高度。由于我们知道了直线旋转的角度和直线的长度,因此我们需要找出与代表旋转的角度相反的那一侧与斜边(也就是直线的长度)和斜边之间的比率。如果所有直角三角形的旋转相同,则始终保持相同。因此,为什么要使用mathf.sin()来旋转行。记住将旋转值(以度数存储)转换为弧度。这可以通过将旋转值乘以mathf.deg2rad来完成。一旦知道了罪恶,就将长度乘以输出的罪恶值。现在我们知道从线的底部到顶部的距离有多长。同样,如果原点是中间位置,则将y位置加到先前计算所得值的一半。如果它在底部,则y位置加上我们从先前计算中获得的整个值。与以前相同的规则。我对Unity还是很陌生,只有一年多的经验,所以我的回答可能有些谬误。希望能帮助到你。 :)