Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查最高的对象';s在y轴上的最高点_C#_Unity3d - Fatal编程技术网

C# 如何检查最高的对象';s在y轴上的最高点

C# 如何检查最高的对象';s在y轴上的最高点,c#,unity3d,C#,Unity3d,我仍然在做关于使用Unity建造塔楼的游戏,现在我有一个问题困扰了我大约一周了 输球的游戏机制是,有一条线以一定的速度上升,当它上升到塔的上方时,游戏应该结束。我想知道有没有办法检查最高物体的最高点(因为旋转物体和不规则堆叠的物体)?有几种方法可以实现这一点: 1) 你可以从高空射出一束光线。找到所有的命中点位置,然后循环通过这些点并存储哪个建筑是最高的 2) 另一个可能是为你的建筑添加的每一块-将其作为一个空建筑游戏对象的子对象。然后你需要做的就是看看哪个建筑的游戏对象有最多的孩子,你知道它是

我仍然在做关于使用Unity建造塔楼的游戏,现在我有一个问题困扰了我大约一周了


输球的游戏机制是,有一条线以一定的速度上升,当它上升到塔的上方时,游戏应该结束。我想知道有没有办法检查最高物体的最高点(因为旋转物体和不规则堆叠的物体)?

有几种方法可以实现这一点:

1) 你可以从高空射出一束光线。找到所有的命中点位置,然后循环通过这些点并存储哪个建筑是最高的

2) 另一个可能是为你的建筑添加的每一块-将其作为一个空建筑游戏对象的子对象。然后你需要做的就是看看哪个建筑的游戏对象有最多的孩子,你知道它是最高的。这假设所有块在Y轴上的大小相同,然后可以使用highestChildCount*blockSizeY轻松计算高度

3) 另一种方法是使用直线上的点。从该点向左右发射一条射线。如果它击中了一座建筑物,那么游戏将继续。如果它没有击中任何东西,游戏就结束了。这是最简单的,因为它不需要计算任何高度,你的建筑可以按照你喜欢的方式建造,只要它们上面有碰撞器,光线就可以击中 (注意。我可能在命名方法时有一些拼写错误,所以在粘贴副本之前要进行校对) 由于您使用的是直线,因此可能需要查找对象的边界框。我从未尝试过边界框方法,因此它可能不起作用。第二种方法使用一点数学知识。如果你的线是垂直的,那么找到最高点很容易。您所需要做的就是找到对象的y位置,并添加y比例的一半以找到最高点。注意:仅当对象的变换原点位于中心时,此选项才起作用。如果原点位于线的底部,则必须添加完整的y比例值。如果向上三分之一,则仅为y刻度值的三分之二。我想你明白了。这条规则也适用于下一个条件。如果你的线有一个角度,这就是它变得有点复杂的地方。我们需要找到直线旋转的绝对值。确保线与垂直方向的旋转角度小于90度。在这之后,我们需要知道线的长度。想象一个直角三角形,直线本身是斜边,底面是直线最左侧点到直线最右侧(或其他方式)之间的距离,直线最低点到直线最高点的距离是三角形的实际高度。因为我们知道直线旋转的角度和长度,所以我们需要计算出斜边(也就是直线的长度)和斜边旋转角度的相对边与斜边之间的比率。如果所有直角三角形的旋转都相同,则始终保持不变。因此,为什么要使用mathf.sin(),线的旋转。请记住将旋转值(以度为单位存储)转换为弧度。这可以通过将旋转值乘以mathf.deg2rad来实现。一旦我们知道了sin,我们就用输出的sin值乘以长度。现在我们知道从底部到顶部的距离有多远了。同样,如果原点是中间,我们将y位置添加到之前计算所得值的一半。如果它在底部,那么y位置加上我们从前面的计算中得到的整个值。和以前一样的规则。我对Unity也很陌生,只有一年多一点的经验,所以我的回答可能有谬误。希望有帮助。:)

有帮助吗?您的问题似乎与查找某些对象的边界框有关。