using UnityEngine; using UnityEngine.Events; using UnityEngine.EventSystems; using UnityEngine.UI; /// /// View和Control功能分离的Toggle /// [RequireComponent(typeof(Toggle))] public class UiToggleVC : MonoBehaviour, IPointerDownHandler { private Toggle _toggle; public event UnityAction onToggleClick; private void Awake() { _toggle = GetComponent(); _toggle.interactable = false; var colors = _toggle.colors; colors.disabledColor = Color.white; _toggle.colors = colors; } public void SetOn(bool isOn) { _toggle.isOn = isOn; } public void OnPointerDown(PointerEventData eventData) { if (onToggleClick != null) onToggleClick(!_toggle.isOn); } } /// /// 用于控制一组UiToggle的工具 /// public class UiToggleVCGroup { private readonly UiToggleVC[] _toggleVcs; public event UnityAction onToggleClick; public UiToggleVCGroup(Toggle[] toggles) { _toggleVcs = new UiToggleVC[toggles.Length]; for (var i = 0; i < _toggleVcs.Length; i++) { var index = i; _toggleVcs[i] = toggles[i].gameObject.AddComponent(); _toggleVcs[i].onToggleClick += a => { if (a) OnToggleClick(index); }; } } public void SetToggle(int index) { for (var i = 0; i < _toggleVcs.Length; i++) _toggleVcs[i].SetOn(index == i); } private void OnToggleClick(int index) { if (onToggleClick != null) onToggleClick(index); } }