My script makes a GameObject move on Input.GetMouseButtonUp(0)
. Unfortunately, when I click on a UI Button
, the move function is triggered causing the GameObject to move.
I do not want my GameObject to move when I press a button on the screen (UI element). I want to prevent GameObject from moving when the click is on a UI component such as Button
? How can I remedy this? Also, I'd like to check if the mouse was clicked over specific UI elements (2 or 3 buttons)
After reading your comment. What you need is EventSystem.current.IsPointerOverGameObject() which checks if pointer is over UI. true
when pointer is over UI, otherwise false
. You can use it with '!
' and run your rotation code only if the mouse is not over the UI.
For Desktop
if(Input.GetMouseButtonUp(0) && !EventSystem.current.IsPointerOverGameObject())
{
//Your code here
}
// For Mobile
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Ended && !EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId))
{
//Your code here
}
The solution above should work but there is a bug. When the mouse button is pressed over the UI Button
then released outside of the UI Button
, it will register as a click. So, basically, the solution works only when you click on UI Button
and release on UI Button
. If you release outside the U Button
, the original problem will be back again.
The best solution is to use a temporary boolean
value and check if button was originally pressed on a UI with Input.GetMouseButtonDown
. That saved boolean
, you can then use when the Button
is released with Input.GetMouseButtonUp(0)
. The solution below is provided to work with both Mobile and Desktop. Mobile tested and it works.
bool validInput = true;
private void Update()
{
validateInput();
#if UNITY_STANDALONE || UNITY_EDITOR
//DESKTOP COMPUTERS
if (Input.GetMouseButtonUp(0) && validInput)
{
//Put your code here
Debug.Log("Valid Input");
}
#else
//MOBILE DEVICES
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Ended && validInput)
{
//Put your code here
Debug.Log("Valid Input");
}
#endif
}
void validateInput()
{
#if UNITY_STANDALONE || UNITY_EDITOR
//DESKTOP COMPUTERS
if (Input.GetMouseButtonDown(0))
{
if (EventSystem.current.IsPointerOverGameObject())
validInput = false;
else
validInput = true;
}
#else
//MOBILE DEVICES
if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Began)
{
if (EventSystem.current.IsPointerOverGameObject(Input.GetTouch(0).fingerId))
validInput = false;
else
validInput = true;
}
#endif
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With