统一获取鼠标位置

Kim*_*Kim 5 c# unity-game-engine

我正在尝试将对象移动到鼠标位置。但这给了我300的大x值,但在那个位置,预置对象的x位置是-4。

rigidBody.velocity = new Vector3(Input.mousePosition.x, EndPointY, 0)*4;
Run Code Online (Sandbox Code Playgroud)

那么如何获得当前的鼠标位置呢?

谢谢..

mar*_*rts 9

ScreenToWorldPoint2D 向量的转换是直接的:

    Vector2 screenPosition = new Vector2(Input.mousePosition.x, Input.mousePosition.y);
    Vector2 worldPosition = Camera.main.ScreenToWorldPoint(screenPosition);
Run Code Online (Sandbox Code Playgroud)


Rya*_*nas 6

那就是当前的鼠标位置。问题是您的对象在世界坐标系中,而鼠标正在使用屏幕坐标系。

您需要使用Camera.ScreenToWorldPoint()转换鼠标位置。


Gaz*_*zzx 6

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;
     }
 }
Run Code Online (Sandbox Code Playgroud)


Eri*_*ast 5

如果您想使用新的 Unity输入系统,您可以执行以下操作:

using UnityEngine;
using UnityEngine.InputSystem;

...

Vector2 screenPosition = Mouse.current.position.ReadValue();
Vector2 worldPosition = Camera.main.ScreenToWorldPoint(screenPosition)
Run Code Online (Sandbox Code Playgroud)

请注意,您需要安装 InputSystem 包才能使其工作。