计算鼠标“z”位置的正确方法(Unity 3d)

3
每当我开发需要使用鼠标输入的游戏时,我都会对计算鼠标位置感到困惑,特别是z轴位置。
我看到许多人使用的方法有:
  1. 鼠标位置z = 鼠标位置y。
  2. z = 相机和物体之间的距离。
  3. z = 物体z和相机z之间的差异。(我正在使用。当相机和物体旋转时不起作用)。
  4. z = 一些任意值。(许多人使用0和其他值)。
  5. 其他方法。
哪种方法是正确的?还有其他正确的方法吗?
请告诉我。

鉴于您似乎对提供的答案不满意,因此您的问题并不清楚。严格来说,鼠标位置在3D空间中没有定义。如果这是您想要的,您可以将渲染的矩形映射到3D空间,从而可以确定鼠标的非投影3D坐标。这是您要找的吗? - user234736
3个回答

1
与您第二个关于鼠标的问题相同,这里也适用相同的答案:使用鼠标进行Unity3d瞄准
简而言之:从相机发出一条射线,与动作所在的平面相交。

0
Vector3 pz = Camera.main.ScreenToWorldPoint(Input.mousePosition);
如果我理解正确,pz.z应该是您要求的。如果可以,请告诉我它是否有效。

1
不,我知道这一点。但是这并没有给出正确的鼠标在世界坐标系中的位置。你在这里跳过了z值。该代码将2D屏幕坐标转换为世界坐标,但是它没有考虑z值。 - Krishna Kumar
2
您正在将具有2D坐标的鼠标在3D中进行投影。这确实提供了正确的鼠标位置。根据您的游戏逻辑,您是唯一选择如何处理z轴的人。 - Kamalen
你现在想要 Z 位置是为了什么?也许我们可以用其他的方法来帮忙。 - Mario Garcia

0

鼠标位置理论上是游戏世界之外的。因此,鼠标位置仅与您与游戏交互的屏幕空间的X和Y坐标相关(即您的游戏的宽度:高度)。

您所问的似乎更多的是“如何在我的游戏世界中建模鼠标位置?”

正如Mario所指出的那样,Camera.main.ScreenToWorldPoint(Input.mousePosition)将把您的鼠标位置转换为世界坐标。但是,这假定您的主摄像机位于您要转换的位置。实际上,您希望在渲染您想要交互的任何空间的相机上调用ScreenToWorldPoint方法。例如,您可能将主游戏世界设置为(0,0,0),但您可能正在使用单独的相机渲染GUI并在(-5000,0,0)处呈现对象。

回答您的问题,建模鼠标z位置应该与您的相机具有相同的z值。然后,您可以对该值执行计算以适应您的特定需求。

例如:

1) mouse.position.z = mouse.position.y - 这两者完全不同。现在你只是使用了一个任意值。 2) 相机和物体之间的距离 - 这是从原始物体位置 z 和原始鼠标位置 z 计算出来的,而不是你实际的 z 值。 3) 见第 2 点。 4) 见第 1 点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接