- Home /
Show UI Button press color from script when invoking onClick
Hi! I have a UI button that I'd like to be able to use through both the mouse and keyboard. When the mouse is used to press the button, the button shows the "Pressed" color, and invokes the OnClick event. When a keyboard key is pressed (say, "1"), that event can be used to also invoke the button's OnClick event (buttonName.onClick.Invoke();), however it doesn't graphically show the button's "Pressed" color, so there isn't visual feedback that it's been pressed.
I feel like I've done sufficient homework, trying different inquires on how to solve this and watching several hotbar tutorial videos, spending 5-6 hours of research time, but I can't find anyone addressing this in particular. Maybe I haven't figured out how to word the question correctly?
What's the best way to do this?
Thanks!
Answer by Elango · Dec 03, 2021 at 06:19 PM
// Optional:
// to leave button in Highlighted state
//ExecuteEvents.Execute(button.gameObject, new PointerEventData(EventSystem.current), ExecuteEvents.pointerEnterHandler);
//
// to leave button in Selected state
//ExecuteEvents.Execute(button.gameObject, new PointerEventData(EventSystem.current), ExecuteEvents.selectHandler);
// or
//button.Select();
ExecuteEvents.Execute(button.gameObject, new PointerEventData(EventSystem.current), ExecuteEvents.submitHandler);
This is exactly what I was looking for. I had no idea this existed and you've opened up a whole new world to me, which is beautiful, and I thank you for it! Hopefully this will be of use to someone else down the line, as well.
Answer by MarekRimal · Dec 03, 2021 at 04:59 PM
You can change button color by button.image.color = newColor
. If you want to set the pressed color than you can do button.image.color = btn.colors.pressedColor
. But then it will stays like that so you have to set it back to normal color. You can do that for example by invoking method in some time which will set the color back. You can try something like this:
void PressButtonColorChange()
{
float duration = 0.1f;
SetPressedColor();
Invoke("SetNormalColor", duration);
}
void SetPressedColor()
{
button.image.color = button.colors.pressedColor;
}
void SetNormalColor()
{
button.image.color = button.colors.normalColor;
}
Thank you for this! I was hoping to avoid doing the end run around by changing the colors of the buttons and actually executing the press action, which I've learned from Elango's response is actually a submit event which I can make use of! I appreciate both of you!
Your answer
Follow this Question
Related Questions
Unity5 UI - How to trigger button click event while preventing menu item deselect event? 1 Answer
Prefab Canvas's buttons arn't working in different scene 4 Answers
Unity2D Player Sprite not showing up in either Editor/Game Scene 0 Answers
Android performance hit on changing Button.Interactable 1 Answer
Mobile Application Controls 0 Answers