OnMouseDown raycast doesnt match UI crosshair
I am creating a first person game with a crosshair for aiming. If the user clicks an object, that object turns red. I have placed a small script on a cube in my scene which uses void OnMouseDown()
to change the colour.
I am also using the new unity UI to place a crosshair on screen. the Crosshair is a 10x10 pixel image, centered in the middle of the screen. (Pivot X: 0.5, Y:0.5, Pos X: 0, Y: 0). The canvas itself is set to "Screen Space Overlay". This roughly works ok, but there seems to be a slight offset issue:
As you can see from the above image, I am able to select the cube, even when my crosshair is actually slightly underneath it. Why is there this mismatch between the raycast and the ui crosshair, and how do I resolve it?
Answer by Placus_Brutus · Mar 02, 2016 at 03:50 AM
If you are using OnMouseDown() on the cube to change the color, it will run any time that the cube is clicked, crosshair or not. You'll need to run a few "if" statements inside the OnMouseDown() to make sure that the crosshair is colliding before changing the color. Something like:
void OnMouseDown()
{
if (crossHairIsColliding == true)
{
// Change color here
}
}
@placusbrutus I feel this slightly misunderstands my problem. The problem is that the crosshair is not really meant to "exist" in the world per-se. It is merely a reference point so that the player knows what they are looking at. The idea is that the crosshair in the middle of the screen and the implicit raycast of "On$$anonymous$$ouseDown" should match up, but that does not seem to be the case.