Bucky
Bucky

Reputation: 1206

Getting mouse position in unity

I'm trying to move a object to the mouse position. But it's giving me large x value like 300 but at that place the pre placed object's x position is -4.

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

So how can I get the current mouse position?

Thank you..

Upvotes: 16

Views: 103724

Answers (5)

Gayan Weerakutti
Gayan Weerakutti

Reputation: 13715

Vector3 MousePosInWorldSpace()
{

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

}

ScreenToWorldPoint returns a point in world space, at the provided z distance from the camera.

Since Input.mousePosition.z position is always 0, in the above example, the z value of the returned point would equal to the z position of the camera.

In the following example Camera.main.nearClipPlane distance is provided as the z distance from camera for the returned world space point. The camera cannot see geometry that is closer to this distance.

Vector3 MousePosInWorldSpace()
{

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

}

Upvotes: 1

Eric Pendergast
Eric Pendergast

Reputation: 628

If you wanted to use the new Unity InputSystem you could do the following:

using UnityEngine;
using UnityEngine.InputSystem;

...

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

Note that you need to install the InputSystem package for this to work.

Upvotes: 5

marts
marts

Reputation: 678

The conversion with ScreenToWorldPoint is straight-forward for 2D Vectors:

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

Upvotes: 11

Gazzx
Gazzx

Reputation: 213

Input.mousePosition will give you the position of the mouse on screen (pixels). You need to convert those pixels to the world units using Camera.ScreenToWorldPoint().

You can follow this link to learn how to drag a 3d object with the mouse or you can copy this code to move an object from the current position to the mouse position.

 //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;
     }
 }

Upvotes: 20

Ryanas
Ryanas

Reputation: 1827

That is the current mouse position. The issue is that your objects are in world coordinates and the mouse is using screen coordinates.

You need to convert the mouse position using Camera.ScreenToWorldPoint().

Upvotes: 6

Related Questions