The question is answered, right answer was accepted
Detect if UI button clicked
Hey guys,
I want to check if a button is clicked.
I can do something like this
buttons[0].GetComponent<Button>().onClick.AddListener(TaskOnClick1);
but I want to use same button many times by changing its name and many task on click events. for example
if I click button at the second scene it will run TaskOnClick1 and if I click it at third scene TaskOnClick2 but it should be the same button.
is there a way to do it like
Void ChangeFunction(string FunctionName){
button[0].GetComponent<Button>().onClick.AddListener(FunctionName);
}
I Know that function is not a parameter but I should be able to give it as parameter. (Thats my biggest question :D )
And another Question is that if I can detect a button click without OnClick.AddListener
for example if I Click 2nd button (ChoiceButton2) there will be a function which is declared by Unity and it gives me button name as a string.
There could be an easier way that i cannot think of. if there is I'm open to ideas.
Thanks for your helps
Answer by Hellium · Apr 21, 2018 at 04:38 PM
void ChangeFunction( UnityEngine.UnityEvents.UnityAction action ){
button[0].GetComponent<Button>().onClick.RemoveAllListeners();
button[0].GetComponent<Button>().onClick.AddListener(action);
}
But you have to provide a delegate to this function, and unfortunately, you won't be able to do this using the editor, only through code:
void Start()
{
ChangeFunction( () => Debug.Log("Hello world") ) ;
}
You may be able to call a function by its name, but it's less efficient.
(Following code not tested)
// Put `using System.Reflection;` at the top of your file
void ChangeFunction( string functionName ){
button[0].GetComponent<Button>().onClick.RemoveAllListeners();
button[0].GetComponent<Button>().onClick.AddListener( () =>
{
Type t = this.GetType();
MethodInfo method = t.GetMethod(functionName);
if( method != null )
method.Invoke(this, null);
});
}
Detecting the click on your UI button can be done in various ways:
onClick.AddListener
Attaching a script implementing
IPointerClickHandler
interfaceAtaching an EventTrigger component
In all these three cases, you will have to implement your own function to retrieve the button name. Without more information,it will be hard to help you.
Follow this Question
Related Questions
How to do Unlockable Items for a Character Collection Clicker Game? How to disable buttons? 0 Answers
How would i modify my current script to remove these UI buttons without killing my pause menu? 1 Answer
How to create buttons with script? 0 Answers
Wanting make shop system, how can I disable this condition after item sold? 0 Answers