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#).

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.

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.