计算鼠标 'z' 位置的正确方法(Unity 3d)
proper way of calculating mouse 'z' position (Unity 3d)
每当我开发使用鼠标输入的游戏时,我都会对计算鼠标位置感到困惑。尤其是z位置。
我看到很多使用的方式。
鼠标位置 z = 鼠标位置 y.
z = 相机和物体之间的距离。
z = 差异 b/w 对象 z 和相机 z。 (我正在使用。当相机和物体旋转时不起作用)。
z = 某个任意值。 (许多使用 0 和其他一些值)。
其他
哪种方法是正确的?还有其他正确的方法吗?
请告诉我。
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:使用来自相机的光线投射与动作所在的平面相交。
每当我开发使用鼠标输入的游戏时,我都会对计算鼠标位置感到困惑。尤其是z位置。
我看到很多使用的方式。
鼠标位置 z = 鼠标位置 y.
z = 相机和物体之间的距离。
z = 差异 b/w 对象 z 和相机 z。 (我正在使用。当相机和物体旋转时不起作用)。
z = 某个任意值。 (许多使用 0 和其他一些值)。
其他
哪种方法是正确的?还有其他正确的方法吗?
请告诉我。
如果我理解正确,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:使用来自相机的光线投射与动作所在的平面相交。