我试图将一个对象移动到鼠标位置,但它给出了类似于300这样的大x值,而在那个位置上,预置对象的x位置是-4。
rigidBody.velocity = new Vector3(Input.mousePosition.x, EndPointY, 0)*4;
如何获取当前鼠标位置?
谢谢。
我试图将一个对象移动到鼠标位置,但它给出了类似于300这样的大x值,而在那个位置上,预置对象的x位置是-4。
rigidBody.velocity = new Vector3(Input.mousePosition.x, EndPointY, 0)*4;
如何获取当前鼠标位置?
谢谢。
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;
}
}
使用ScreenToWorldPoint
进行2D向量的转换很简单:
Vector2 screenPosition = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
Vector2 worldPosition = Camera.main.ScreenToWorldPoint(screenPosition);
using UnityEngine;
using UnityEngine.InputSystem;
...
Vector2 screenPosition = Mouse.current.position.ReadValue();
Vector2 worldPosition = Camera.main.ScreenToWorldPoint(screenPosition)
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));
}