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

proper way of calculating mouse 'z' position (Unity 3d)

每当我开发使用鼠标输入的游戏时,我都会对计算鼠标位置感到困惑。尤其是z位置。

我看到很多使用的方式。

  1. 鼠标位置 z = 鼠标位置 y.

  2. z = 相机和物体之间的距离。

  3. z = 差异 b/w 对象 z 和相机 z。 (我正在使用。当相机和物体旋转时不起作用)。

  4. z = 某个任意值。 (许多使用 0 和其他一些值)。

  5. 其他

哪种方法是正确的?还有其他正确的方法吗?

请告诉我。

Vector3 pz = Camera.main.ScreenToWorldPoint(Input.mousePosition);

如果我理解正确,

pz.z 应该是您要求的。告诉我它是否有效

理论上鼠标位置在游戏世界本身之外。因此,鼠标位置仅与您与游戏交互的屏幕 space 的 X 和 Y 坐标相关(您的游戏的 IE width:height)。

你问的似乎更多 "How do I model the mouse position in my game world?"

如 Mario 所述,Camera.main.ScreenToWorldPoint(Input.mousePosition) 会将您的鼠标位置转换为世界坐标。但是,这假设您的主相机是您要转换到的位置。实际上,您想在渲染任何 space 您想要与之交互的相机上调用 ScreenToWorldPoint 方法。例如,您的主要游戏世界可能位于 (0, 0, 0),但您可能使用单独的摄像机在 (-5000, 0, 0) 处渲染对象来渲染 GUI。

为了回答您的问题,要对鼠标 z 位置进行建模,它应该与相机的 z 值相同。然后,您可以对该值进行计算以满足您的特定需求。

IE:

1) mouse.position.z = mouse.position.y - 这些是完全不同的。现在你只是使用一个任意值 2) 相机和物体之间的距离 - 这是根据您的原始 object.position.z 和原始 mouse.position.z 进行的计算。不是您的实际 z 值。 3) 见 2。 4) 见 1.

与您第二个基于鼠标的问题中的相同答案也适用于此:

TL;DR:使用来自相机的光线投射与动作所在的平面相交。