//-------------------------------------------------------- // [Author]: 玩个游戏 // [ Date ]: Tuesday, October 31, 2017 //-------------------------------------------------------- using UnityEngine; using UnityEngine.EventSystems; using System; //关联按钮,其中一个亮起,其他按下,文字颜色对应变更 //数据更新通过SelectBtn更新 或者 GroupButtonExManager.SelectButton public class GroupButtonEx : ButtonEx { [SerializeField] GroupButtonExManager m_Manager; // 按钮组管理器引用 public GroupButtonExManager manager { get { return m_Manager; } set { if (m_Manager != value) { // 从旧管理器移除并添加到新管理器 if (m_Manager != null) { m_Manager.RemoveButton(this); } m_Manager = value; if (m_Manager != null) { m_Manager.AddButton(this); } } } } [NonSerialized] TitleBtnState m_State = TitleBtnState.Normal; public TitleBtnState state { get { return m_State; } set { if (m_State != value) { m_State = value; } } } [SerializeField] ImageEx m_SelectIcon; public ImageEx selectIcon { get { return this.m_SelectIcon; } set { this.m_SelectIcon = value; } } [SerializeField] ImageEx m_UnSelectIcon; public ImageEx unSelectIcon { get { return this.m_UnSelectIcon; } set { this.m_UnSelectIcon = value; } } [SerializeField] TextEx m_Title; public TextEx title { get { return this.m_Title; } set { this.m_Title = value; } } [SerializeField] UIEffectPlayer m_SelectEffect; //选中特效 public UIEffectPlayer selectEffect { get { return m_SelectEffect; } set { m_SelectEffect = value; } } protected override void Awake() { base.Awake(); // 确保已添加到管理器 if (m_Manager != null) { m_Manager.AddButton(this); } } protected override void OnDestroy() { if (m_Manager != null) { m_Manager.RemoveButton(this); } base.OnDestroy(); } public override void OnPointerClick(PointerEventData eventData) { base.OnPointerClick(eventData); SelectBtn(); } // 选中当前按钮,只处理刷新显示 public void SelectBtn(bool forceRefresh = false) { if (m_State == TitleBtnState.Click && !forceRefresh) return; // 通过管理器处理选中逻辑 if (m_Manager != null) { m_Manager.SelectButton(this); } } // 更新按钮状态 public void UpdateButtonState() { // 更新图标显示 if (m_SelectIcon != null) m_SelectIcon.SetActive(m_State == TitleBtnState.Click); if (m_UnSelectIcon != null) m_UnSelectIcon.SetActive(m_State != TitleBtnState.Click); // 更新文字颜色 if (m_Title != null && m_Manager != null) { m_Title.color = m_Manager.GetTextColorForState(m_State); } if (m_SelectEffect != null) { if (m_State == TitleBtnState.Click) { //选中,显示特效 m_SelectEffect.Play(); } else { m_SelectEffect.Stop(); } } } }