using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Events; using UnityEngine.EventSystems; using UnityEngine.UI; using System; public class NewButton : Button { public bool m_IsOn; private bool isPointerInside; public bool m_IsPointerInside { get => isPointerInside; protected set => isPointerInside = value; } private bool findText = false; private Text text; /// /// 按钮文本 /// public Text m_Text { get { if (!findText && text == null) { findText = true; text = GetComponentInChildren(true); } return text; } protected set => text = value; } public class Click : UnityEvent { } public Click m_onClick = new Click(); /// /// 是否按住 /// public bool m_boolPressHold; public Action m_actionPressHold; protected override void Awake() { base.Awake(); onClick.AddListener(OnClick); } void Update() { if (m_boolPressHold) { m_actionPressHold?.Invoke(); } } /// /// 点击事件 /// private void OnClick() { m_IsOn = !m_IsOn; m_onClick?.Invoke(m_IsOn); } /// /// 同步文本内容 编辑器执行 /// public void SyncText() { if (m_Text == null) m_Text = GetComponentInChildren(); if (m_Text != null) m_Text.text = name; } protected override void OnDisable() { base.OnDisable(); isPointerInside = false; } public override void OnPointerEnter(PointerEventData eventData) { base.OnPointerEnter(eventData); isPointerInside = true; } public override void OnPointerExit(PointerEventData eventData) { base.OnPointerExit(eventData); isPointerInside = false; } public override void OnPointerDown(PointerEventData eventData) { base.OnPointerDown(eventData); m_boolPressHold = true; } public override void OnPointerUp(PointerEventData eventData) { base.OnPointerUp(eventData); m_boolPressHold = false; } }