XNA:我有一个1 * 1 * 1的盒子,想知道我在哪一边点击它。 (我的世界克隆)

时间:2011-04-12 20:48:50

标签: 3d xna collision

我正在创建一个Minecraft克隆(你在3d空间中创建或删除块以创建结构的游戏) 所以我几乎可以得到所需的一切工作。 如果我看一个Block,它会以我想要的方式变高,如果我用右键单击调用“RemoveBlock()”,则会删除当前查看的块。 但现在我也想通过点击leftclick来添加块。

所以我拥有的是:AddBlock(Vector3 LookingAt,Vector3 Direction) 其中“LookingAt”与我存储Blockdata的3dArray正确相关。并且Direction是Vector3.UnitX / Z / Y和底片。如果我手动说Direction = Vector3.UnitY,那么将添加LookedAt块上方的块。这就是我想要的。

但是我怎么弄清楚我在哪一边看着Block。即。确定方向: 我试过的是在LookedatBlock周围创建6个Sphere并从CameraPossition中我画了一个Ray到CameraDirection,然后试图找出它首先碰撞的Sphere。 6个speres的中心始终位于立方体每侧的中间,半径为0.5f。这对我来说很有意义。但它不起作用。我该怎么做才能让它发挥作用。

我需要将结果作为某种Vector3.UnitX / Y / Z,以便我可以将其与其他方法一起使用。

谢谢。

1 个答案:

答案 0 :(得分:3)

我想你可以通过检查X,Y和Z值以及从立方体的原点Vector找到它们的内容来确定你点击的那一侧。

例如,假设100像素立方体的左上角是带有(0,0,0)的Vector3(当然,相对于立方体)。好吧,如果你单击立方体的右前方右下角,坐标将是(100,100,100),对吧?

使用它,您可以简单地尝试在立方体上找到正方形的边界。例如,六个方面将位于以下向量之间:

第1面:(0,0,0),(100,0,0),(0,0,100)和(100,0,100) 第2面:(0,100,0),(100,100,0),(0,100,100)和(100,100,100)

这些是立方体的顶部和底部,分别使用XYZ坐标系并选择一个点开始。如果我弄乱了其中一个坐标,请原谅我,但他们应该是正确的。

所以你可以确定你点击多维数据集的位置,通过简单地找到(好吧,如果这一方的值是(i,100,j),精确定位你点击的位置的Vector3以找出它在哪一侧... )。

这有什么意义吗?我假设当你点击立方体时,会返回一些Vector。

此外,添加一个显示鼠标当前指向的矢量的调试工具可能会有所帮助吗?