- Home /
Activate an OnMouseDown event before clicking a UI button?
Hey, so I am making a mobile game and I have 2 big invisible buttons on either side of the screen. The idea is that the player can click on one of the sides of the screen and the camera will scroll in that direction. I have that all set up. The issue I am having is that I also have objects I want to be able to click on under those buttons. If I use an OnMouseDown right now it just does what I want to when I click on the object and also scrolls the screen. I tried setting it up so that when the mouse is hovered over the object it disables the buttons which works fine in the editor but considering it is a mobile game and you can't really do that on a phone, that isn't a working solution. So, my question is, is there any way to have a UI button be pressed AFTER an OnMouseDown event? If the event fires first then I can just disable the buttons if you clicked on an object so then the buttons dont fire. Let me know if there is any way around this, thanks
Answer by xibanya · Dec 24, 2019 at 07:43 AM
You could remove the button component from the images and instead attach a script like this:
using UnityEngine;
using UnityEngine.EventSystems;
using System;
public class UIEventHandler : MonoBehaviour, IPointerClickHandler
{
public event Action<string> onPointerClick;
public void OnPointerClick(PointerEventData eventData)
{
if (onPointerClick != null) onPointerClick(gameObject.name);
}
}
Then in the script that has the actions for that scene have
public UIEventHandler leftButton;
public UIEventHandler rightButton;
and drag the buttons into the fields in the inspector. Have a method like,
public void OnUIClick(string sender)
{
if (Physics.Raycast(Camera.main.ScreenPointToRay(Position),
out RaycastHit hit, detectDistance, layerMask) &&
hit.collider.GetComponent<Interactable>() ! null)
{
//interact with the thing
}
else
{
if (sender == "LeftButton") //do button thing
else if (sender == "RightButton") //do button thing
}
}
then in Start() subscribe to the events like this
void Start()
{
leftButton.onPointerClick += OnUIClick;
rightButton.onPointerClick += OnUIClick;
}
You can add other kinds of interactions to the UIEventHandler class too, like IPointerEnter and IPointerExit for a visible button so you can decide to nope out of a visual highlight or not before it happens.
Your answer
![](https://koobas.hobune.stream/wayback/20220612220604im_/https://answers.unity.com/themes/thub/images/avi.jpg)