using UnityEngine; using System.Collections; using UnityEngine.UI; // 用于控制一组 UIToggleSwap public class TogglesControl : MonoBehaviour { private ToggleGroup toggleGroup; // 控制唯一 Toggle 被勾选 private Toggle[] toggles; // 子物体 toggles private UIToggleSwap[] toggleSwaps; // toggles 显示脚本 public delegate void VoidIntDelegate(int index); public event VoidIntDelegate OnTogglesSelect; // 返回当前被选中的 Toggle 索引 private bool hasInit = false; private void Awake() { Init(); } private void Init() { if (!hasInit) { toggleGroup = transform.GetComponent(); toggles = transform.GetComponentsInChildren(); toggleSwaps = transform.GetComponentsInChildren(); for (int i = 0; i < toggles.Length; ++i) { toggles[i].group = toggleGroup; toggles[i].onValueChanged.AddListener(OnToggleChange); toggles[i].onValueChanged.AddListener(toggleSwaps[i].OnToggleSwap); } hasInit = true; } } /// /// 设置ToggleS组中某个Toggle成激活状态 /// /// 激活的的Toggle索引,0为第一个 public void SetToggleOn(int index = 0) { // 此处Init为解决当其他脚本在OnEnable调用时,该脚本会出现未初始化的情况。 Init(); if(toggles != null && index != -1) { if(index < toggles.Length) { toggles[index].isOn = true; } } } public void OnToggleChange(bool isOn) { if(isOn) { for(int i = 0; i < toggles.Length; i++) { if(toggles[i].isOn && OnTogglesSelect != null) { OnTogglesSelect(i); break; } } } } public void OnDisable() { foreach (Toggle tg in toggles) { tg.isOn = false; } } }