- Home /
Ignore Input.GetMouseButtonUp for clicks that were used on GUI elements
In Update()
I use Input.GetMouseButtonUp(0)
to detect mouse releases. I want the player to interact with my gameplay objects when the user releases the mouse button.
If the user clicks and releases a button in the GUI, my mouse-release code in Update()
is called. But, I want to ignore these releases instead.
I can ignore mouse-button-down frames by checking GUIUtility.hotcontrol, but this doesn't work for the mouse-button-up frame.
Is there any simple method to ignore GetMouseButtonUp frames that were used to click on a GUI element? Currently I'm looking at something like adding m_ignoreNextMouseUp = true
after every single GUI.Button
call.
void Update() {
if (Input.GetMouseButtonUp(0)) {
// Ignore this code if the user had mouse-downed on a GUI element.
}
}
Answer by TheMaster42 · Aug 05, 2014 at 09:38 PM
Looks like the "right" way to do this is to poll Event
s in OnGUI()
.
In the OnGUI()
call where Event.current.type == Event.MouseUp
, GUIUtility.hotControl
can be reliably checked, even for MouseUp events. This is no longer true by the time Update()
gets called, apparently.
So the solution for the original code:
void OnGUI() {
if (Event.current.type == EventType.MouseUp && Event.current.button == 0 && GUIUtility.hotControl == 0) {
// This code will be ignored if the user had mouse-downed on a GUI element.
}
}
Answer by dsada · Aug 03, 2014 at 09:10 PM
You can store the rectangles of all your GUI elements and iterate them through cehck if its true for any rects: rect.Contains(Input.mousePosition) If it is, then ignore it
Your answer
Follow this Question
Related Questions
Unity 4.7 - OnGUI prevent click/touch through 0 Answers
why is my GUI script bugging other GUI scripts? 0 Answers
OnGUI button created by a foreach loop 4 Answers
How completly remove GUI.Repaint() calls ? 1 Answer
GUI Placement Question. 1 Answer