Techniques d'intégration multimédia, prof(s):
Les boutons radios sont essentiellement des cases à cocher qui ont un comportement de groupe: quand on active un bouton radio, les autres boutons du même groupe se désactivent tous. De cette façon, un seul bouton du groupe est actif à la fois.
Dans Unity, on utilise des boutons Toggle pour reproduire ce comportement.
Dans le Canvas, on créé en premier lieu nos boutons Toggle (clic de droite sur le Canvas, puis UI>Toggle). Ensuite, on créé un Empty GameObject pour les organiser dans la hiérarchie (clic de droite sur le Canvas, puis Create Empty).

Bien entendu, on peut renommer les items dans la hiérarchie selon nos besoins (ici un groupe de boutons pour des fruits)...

...et modifier les champs de texte des toggles pour les personnaliser sur la scène:

Pour créer le comportement de boutons radios, on commence par sélectionnet le gameObject parent du groupe (nommé GroupeFruits dans notre exemple) et on lui donne le composant ToggleGroup dans l'inspecteur:

Ensuite, on associera à chacun des Toggles du groupe le gameObject parent (GroupeFruits) dans leur champ "Group"

À partir de maintenant, les boutons de ce groupe se comportent comme des boutons radios.
1- Approche 1: Événement
Un Toggle possède un événement OnValueChanged, accessible dans sa fenêtre d'inspecteur. Cet événement permet de faire appel à une fonction quand l'état du toggle change d'inactif à actif, ou l'inverse.
Notez que quand les Toggle font partie d'un groupe, cela signifie que si on active un Toggle il y en a un autre qui se désactive. Donc, l'événement est appelé 2 fois...
Puisque tous les Toggle appelent la même fonction et que 2 toggles appelent l'événement OnValueChanged quand on clique, déterminer lequel est effectivement sélectionné n'est pas aussi direct qu'on le souhaiterait.
Voici une approche pour y parvenir:
Dans GameManager, faites une fonction publique qui sera activée par l'événement OnValueChanged de vos Toggle:
// Pour un groupe Toggle de 4 boutons
public void ChoixRadio(Toggle toggle)
{
if(toggle.isOn)
{
Debug.Log("Le Toggle actif est: "+toggle.name);
// Activez ici le code qui détermine
// l'effet de ce choix...
}
}
Remarquez que lorsque l'association de ChoixRadio sera faite à l'événement OnValueChanged, il faudra glisser le Toggle de la hiérarchie sur le champ nommé toggle dans l'événement. Ainsi, quand un bouton Toggle sera activé, il passera une référence à lui-même à la fonction ChoixRadio() qui sera alors en mesure de réagir si le bouton est actif.
2- Approche 2: Lecture externe
Dans ce scénario, l'usager sélectionne le bouton radio de son choix mais l'effet du bouton n'est pas immédiat. Un autre script activé plus tard (par un bouton par exemple) consultera le groupe de boutons Toggle pour déterminer lequel est coché et agir alors en conséquences.
Par exemple, dans GameManager on peut avoir une fonction comme ceci, qui retourne le nom du Toggle actif dans un groupe:
private string GetActiveToggle(ToggleGroup group)
{
string s = "" ;
foreach(Toggle toggle in group.ActiveToggles())
{
s = toggle.name;
}
return s;
}
Il faudra bien entendu passer en paramètre à cette fonction la référence au ToggleGroup à "lire". Ce ToggleGroup peut être attribué à GameManager par sérialisation:
[SerializeField] private ToggleGroup _groupeRadio;
// Ce qui va nous permettre de faire appel à la fonction GetActiveToggle() mentionnée plus haut:
// Fonction activée par un bouton de l'interface
public void Traiter()
{
// Détermine et affiche le nom du Toggle actif
string optionCochee = GetActiveToggle(_groupeRadio;);
Debug.Log(optionCochee);
// Activez ici le code qui détermine
// l'effet de ce choix...
}