- Home /
Can't change UI Button Listeners
I've been trying to change the Onclick event I set up in the editor of a button to something else.I'm Calling removeAllListeners() as some examples I've found and then adding as a listener an anonymous function. When I click the button after OnGameEnd Runs, I still see the wrong event ocurring and no loadLevel. I now OnGameEnd does run since I can see the text changing. Any ideas of what I'm doing wrong or is this a bug? For now I'll work around this just checking a boolean in the event I set in the editor, but I would like to know how to change button events in runtime properly.
In the code below, "arrowButton" is same as GetComponent()
, I just cached it in a private variable at the start.
/// <summary>
/// Re-enables arrow, makes it so we load the next level once we click it.
/// </summary>
public void OnGameEnd() {
arrowButton.interactable = true;
arrowAnimator.SetBool("Disabled", false);
GetComponentInChildren<Text>().text = gameEndText;
// When this arrow is clicked now that the game is over, it'll just load the next level.
arrowButton.onClick.RemoveAllListeners();
arrowButton.onClick.AddListener(() => Application.LoadLevel(nextLevelName));
}
Answer by jenci1990 · Dec 24, 2014 at 07:59 AM
If you add listener with script,the RemoveAllListeners() works, but if you add listener in editor use this:
arrowButton.onClick.SetPersistentListenerState(0, UnityEngine.Events.UnityEventCallState.Off);
This line disable the first (0.) event what you add in inspector.
Thank you! this completely worked. What was also strange is that event I added using Addlistener didn't execute until I turned off that event I added in the editor. Working code now looks like this:
arrowButton.onClick.SetPersistentListenerState(0, UnityEngine.Events.UnityEventCallState.Off);
arrowButton.onClick.AddListener(() => Application.LoadLevel(nextLevelName));
Your answer
Follow this Question
Related Questions
Unity 4.6 button movement problem 1 Answer
How do I create a button that toggles with the 4.6 UI? 6 Answers
How to detect mouseEnter, mouseLeave, mouseHover events with UIElements (Unity 2019.3) 3 Answers
(4.6 UI) How to set up a window with x buttons, with a scroll bar? 1 Answer
UI Button OnClick Function - How to get name of button that was clicked? 2 Answers