- Home /
Checking the position of the mouse cursor in 3d space
Hi guys,
I have 4 points on my screen (that have the tag "Locator"). All 4 points have the same location on the z axis but different locations on the x and y axis. Those 4 points form a plane.
I wish to be able to know where, on said plane, my mouse cursor is at any given time. So if I put my mouse over the top left "Locator" I want to obtain the result (0,0) and if I put it over the bottom right "Locator" I want it to return (1,1).
I tried solving this by casting a ray as such - Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); but the results are very inaccurate. Please advice on how to solve this (preferably in c#).
The z's are always the same? Is the plane always flat to the camera? Why doesn't Input.mousePosition.x/Screen.width, with a scale factor for "upper-left quadrant," say, solve the problem?
The rayCast method seems to be needed only if the plane can be at odd angles to the camera.
Answer by Berenger · Feb 05, 2012 at 06:07 PM
There isn't any reason for ScreenPointToRay to be inaccurate, if the plane that receive the ray is at the same depth as your locators. Unless it's due to float imprecision, which you can fix with a Round().
A better way to do it though, would be the opposite (only if your camera isn't moving). Compute the screen / viewport position of thos locators once and for all, then just replace the mouse pos in their relative 2D space.
Answer by gregthegeek · Feb 05, 2012 at 07:40 PM
Use Camera.main.ScreenToWorldPoint(Input.mousePosition); to get the mouse position in world space. Then check the x and y of that with the x's and y's of your locators.
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
Mouse Aim for a 2.5D game 1 Answer
Please, I need help with Raycasting! 4 Answers
Move object towards mouse but if mouse moves object fallows it's original path 0 Answers