unity3d 方法来检查点是否在矩形内?(在边界内移动对象)

iswrvxsc  于 2023-04-12  发布在  其他
关注(0)|答案(1)|浏览(501)

我想做的是移动物体,比如说一个盒子在另一个盒子的上面,但是不要越过边界。想想墙上的移动图片。所以如果我拖动一个小物体,当我到达边缘的时候,物体就停止向那个方向移动,但是在其他方向它可以移动(例如不能越过左边缘,但可以上下移动)。我试图弄清楚如何确定对象边缘,对象边缘上的点或对象在该轴上的一半大小的中心点在矩形内,而不是在该轴上的对象边界上。
这里的问题是较小的物体与较大的物体有一点偏移,它们不在同一平面上。另一个问题是平面与世界轴不对齐,同样的方法也适用于其他平面,比如与点R2,R5,R6,R4成一定Angular 的平面
我已经有了一些东西,这是工作的一些情况下,但不是所有的,这是更复杂的,我希望它是,可能有很多更容易的解决方案,所以我在这里寻找建议。
我使用了很多点,平面,投影等...但应该有一些更简单的东西。也许我在这里过度工程化:)

编辑:
我实际上使用的是方块碰撞器边界,但是使用的顶点是面向较大对象(墙)的前方,对于较小对象(绘画)也是一样,只是那些面向前方的方向。所以基本上我不是在处理矩形。所以基本上问题是如何检查较小对象的任何角落是否在较大对象的角落所构成的区域内。

  • 得到墙的平面
  • 获取墙平面上绘画的点(由于偏移)
  • 以某种方式检查点是否在该区域内?
5jdjgkvh

5jdjgkvh1#

所以你想确定一个长方体是否会和一个长方体发生碰撞,对吗?
让我们看一下墙垂直于Y轴的简单情况。
发生碰撞的唯一方法是在墙的每一侧沿着Y轴有一个或多个角。由于墙的所有角在Y轴上的值相同,这意味着我们可以使用,例如R1。

all_Py = Y value for all corners of the painting

collision = min(all_Py) < R1.y && max(all_Py) > R1.y

但是正如你所说的,墙并没有与世界轴对齐。所以现在我们需要表示绘画相对于墙的XYZ坐标,而不是绝对坐标。为此,我们可以对墙和绘画的角的坐标应用旋转,并对新坐标使用简单的碰撞检查。要应用旋转,只需将每个向量乘以适当的旋转矩阵,我们需要计算。
我们想要的旋转是将墙的法向量Map到Y轴向量(0,1,0)的旋转。墙的法向量v是叉积R1R3 x R3R4。
有了两个向量后,找到旋转矩阵是一个相当简单的过程,我真的很想用一些TeX标记,所以我不会在这里写,我会推荐你去math.stackexchange.com上的this post

相关问题