- Home /
Avoiding click-though in 4.6
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.
Answer by Nonakesh · Sep 28, 2014 at 08:33 PM
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.
Your answer
Follow this Question
Related Questions
The name 'Joystick' does not denote a valid type ('not found') 2 Answers
Is it faster to set a variable every frame or check if it needs to be changed? 3 Answers
Application.OpenURL not working 1 Answer
Unity 4.6 Beta Controller Menu Button Movement 0 Answers
Instantiate new Gui Button from code 1 Answer