using UnityEngine.UI; using System; using UnityEngine; using UnityEngine.EventSystems; public class ToggleEx : Toggle { [SerializeField] int m_Audio; public int clickAudio { get { return this.m_Audio; } set { this.m_Audio = value; } } public GameObject activates; public GameObject deactivates; protected override void OnEnable() { base.OnEnable(); onValueChanged.AddListener(CustomChanged); } protected override void OnDisable() { base.OnDisable(); onValueChanged.RemoveListener(CustomChanged); } protected void CustomChanged(bool isOn) { // 使用 CanvasGroup 控制显隐,避免 SetActive 触发 Canvas 重建 if (activates != null) { var canvasGroup = activates.AddMissingComponent(); canvasGroup.alpha = isOn ? 1f : 0f; canvasGroup.interactable = isOn; canvasGroup.blocksRaycasts = isOn; } if (deactivates != null) { var canvasGroup = deactivates.AddMissingComponent(); canvasGroup.alpha = isOn ? 0f : 1f; canvasGroup.interactable = !isOn; canvasGroup.blocksRaycasts = !isOn; } } public override void OnPointerClick(PointerEventData eventData) { base.OnPointerClick(eventData); SoundPlayer.Instance.PlayUIAudio(clickAudio); } }