I can see from previous scripts that UI click though is avoided though precise pixel checking though manually entered data.
I have been looking though some info on 4.6 and can’t find if there is a new better way to do this? I noticed in the Widget demo provided that the bunny does not cycle colors when over a button (no click though happens), how can I implement this? Ive looked though the scripts and cant find anything.
Thankyou.
I found a solution, that isn’t beautiful, but works as a workaround. You will have to check this method every time you want the mouse to interact with the world. If it is true, just return and do nothing.
public bool IsMouseOnUI()
{
foreach (var t in guiPanels)
{
if (RectTransformUtility.RectangleContainsScreenPoint(t, Input.mousePosition, raycaster.eventCamera))
{
return true;
}
}
}
guiPanels is a array of all the basic UI elements that can contain other elements, for example panels that contain multiple buttons. You may also use FindObjectsOfType() for this, but I havent tested that and it will be less efficient.
raycaster is the GraphicRaycaster component on your canvas object. If the script where you are checking the mouse position is directly on the canvas, you can just get it with GetComponent().
The disadvantage of this method is that it will only check if the mouse position is inside the panel rectangle, so if you have a mask or custom texture on it, it will still return true if the mouse is inside the rectangle, even when the texture under the pointer is transparent.