- Home /
UI toggle.onValueChanged assigning method via script
Hello. I'm creating multiple UI toggles at runtime. I want each of them to change a boolean public field of some instance of a class. Here, I have multiple characters and each toggle should make each of them 'sleep' or 'travel'. But it appears that all the toggles influence only the last created character in a weird way.
foreach (TeamMember tm in dictionaryyy)
{
// ...
GameObject toggleSleep = (GameObject) GameObject.Instantiate (ToggleSleepPrefab);
toggleSleep.transform.SetParent (newOutput.transform);
toggleSleep.GetComponent<Toggle>().onValueChanged.AddListener
(delegate
{
if (toggleSleep.GetComponent<Toggle>().isOn)
tm.setAction(Enums.Actions.Sleep);
else
tm.setAction(Enums.Actions.Travel);
}
);
}
Oh yeah, tm.setAction(Enums.Actions a) is defined in TeamMember class and it's just a setter for one variable.
Here's a screenshot to give you an idea of what I'm talking about.
I've never really used delegates, I've used events in a simple way a couple of times, that's it. I'm not an advanced-level programmer, so please try to explain everything :)
Thanks very much!
Answer by kaka24fan · Apr 13, 2015 at 06:38 PM
Ok, I made it work, but in a roundabout fashion. Now each "line" called singleOutput holds the proper character's ID and then:
toggleSleep.GetComponent<Toggle>().onValueChanged.RemoveAllListeners();
toggleSleep.GetComponent<Toggle>().onValueChanged.AddListener
(delegate
{
//Debug.Log (toggleSleep.GetComponent<Toggle>().isOn.ToString ());
if (toggleSleep.GetComponent<Toggle>().isOn)
teamMembers[toggleSleep.transform.parent.GetComponent<IDholder>().list[0]].setAction(Enums.Actions.Sleep);
else
teamMembers[toggleSleep.transform.parent.GetComponent<IDholder>().list[0]].setAction(Enums.Actions.Travel);
}
);
Probably the first line showed above isn't necessary but I'll just leave it as is. Cheers
Your answer
![](https://koobas.hobune.stream/wayback/20220613192941im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
add delegate to toggle in unity 4.6 UI 2 Answers
Video Player time slider 2 Answers
How do I create an undertale player health bar in C #? 1 Answer
Need help with Tricky problem with Distance calculation 0 Answers
UI Toggle Component Broken? 0 Answers