Как на Unity програмно создать группу переключателей (ToggleGroup)?
Прошу помощи с примером для Unity програмного создания группы переключателей. И обработки событий переключения в ней.
Ничего по данной теме не "гуглится", только создание через редактор, а уже далее программная работа с ней.
Обычный переключатель создается, например, через GUILayout.Toggle(...). А как создать группу, чтобы значение устанавливалось только для одного?
Ответы (1 шт):
Введение: Пока что у меня в голове нет определенной картины того, что вам нужно, однако после ваших последних трех комментариев, думаю лучше дать ответ.
Итак, вам нужно программно создать ToggleGroup с ToggleButton'ами (далее переключатель). Для меня данная задача выглядит следующим образом: из скрипта создать на сцене объект с компонентом ToggleGroup, в котором будут несколько переключателей, объединенных в одну группу.
Предлагаю следующий скрипт:
[SerializeField] private GameObject TogglePrefab; // Префаб переключателя
public void CreateToggles () { // Метод для создания группы с переключателями
ToggleGroup Group = new GameObject().AddComponent<ToggleGroup>(); // Создаем объект с ToggleGroup
for (int i = 0; i < [кол-во переключателей]; i++) {
GameObject newToggleButton = Instantiate(TogglePrefab, [позиция], Quaternion.identity); // Создаем новый переключатель
newToggleButton.GetComponent<Toggle>().Group = Group; // Кладем его в группу
}
}
Получаем метод, который при вызове создает группы переключателей. Естественно, в параметрах можно указать, например, кол-во переключателей и т.д.
Префаб переключателя создается заранее, указывается скрипту в инспекторе, а текст переключателя и картинку (если нужно) вы можете уже из кода заменить, например, текст на переключателе через transform.GetChild(0).GetComponent<Text>() = "текст".
По-моему текст переключателя находится в переключателе (вмсысле, переключатель - родитель), поэтому через GetChild(0) получаем первого дочернего объекта переключателя и меняем тот текст.
Заключение: Если я все-таки не понял вашу идею, распишите ее подробнее. Если все верно, напишите или примите ответ - удалю введение и заключение.