hch
2026-02-06 2b3fe1175765e0df62caba9dc160c0dbfefb0a8a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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>();
            canvasGroup.alpha = isOn ? 1f : 0f;
            canvasGroup.interactable = isOn;
            canvasGroup.blocksRaycasts = isOn;
        }
        if (deactivates != null)
        {
            var canvasGroup = deactivates.AddMissingComponent<CanvasGroup>();
            canvasGroup.alpha = isOn ? 0f : 1f;
            canvasGroup.interactable = !isOn;
            canvasGroup.blocksRaycasts = !isOn;
        }
    }
 
    public override void OnPointerClick(PointerEventData eventData)
    {
        base.OnPointerClick(eventData);
 
        SoundPlayer.Instance.PlayUIAudio(clickAudio);
    }
 
}