在Unity中获取鼠标位置

16

我试图将一个对象移动到鼠标位置,但它给出了类似于300这样的大x值,而在那个位置上,预置对象的x位置是-4。

rigidBody.velocity = new Vector3(Input.mousePosition.x, EndPointY, 0)*4;

如何获取当前鼠标位置?

谢谢。

5个回答

20

Input.mousePosition会给出鼠标在屏幕上的位置(像素)。您需要使用 Camera.ScreenToWorldPoint() 将这些像素转换为世界单位。

您可以通过此链接学习如何使用鼠标拖动3D对象,或者您可以复制以下代码将一个对象从当前位置移动到鼠标位置:

 //the object to move
public Transform objectToMove;

 void Update()
 {
     Vector3 mouse = Input.mousePosition;
     Ray castPoint = Camera.main.ScreenPointToRay(mouse);
     RaycastHit hit;
     if (Physics.Raycast(castPoint, out hit, Mathf.Infinity))
     {
         objectToMove.transform.position = hit.point;
     }
 }

11

使用ScreenToWorldPoint进行2D向量的转换很简单:

    Vector2 screenPosition = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
    Vector2 worldPosition = Camera.main.ScreenToWorldPoint(screenPosition);

6

这是当前鼠标位置。问题在于你的对象使用的是世界坐标系,而鼠标使用的是屏幕坐标系。

你需要使用Camera.ScreenToWorldPoint()将鼠标位置转换成世界坐标系。


4
如果您想使用新的Unity InputSystem,您可以按照以下步骤进行:
using UnityEngine;
using UnityEngine.InputSystem;

...

Vector2 screenPosition = Mouse.current.position.ReadValue();
Vector2 worldPosition = Camera.main.ScreenToWorldPoint(screenPosition)

请注意,为了使其正常工作,您需要安装InputSystem软件包。 点击此链接查看安装指南。

1
Vector3 MousePosInWorldSpace()
{

   return Camera.main.ScreenToWorldPoint(Input.mousePosition);

}
ScreenToWorldPoint返回一个在世界空间中的点,该点距相机提供的z距离。
由于Input.mousePosition.z位置始终为0,在上面的例子中,返回点的z值将等于相机的z位置。
在下面的示例中,Camera.main.nearClipPlane距离被提供作为从相机返回的世界空间点的z距离。相机无法看到比此距离更近的几何形状。
Vector3 MousePosInWorldSpace()
{

   Vector3 mousePos = Input.mousePosition;
   return Camera.main.ScreenToWorldPoint(new Vector3(mousePos.x, mousePos.y, Camera.main.nearClipPlane));

}

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