//-------------------------------------------------------- // [Author]: 玩个游戏 // [ Date ]: Saturday, November 25, 2017 //-------------------------------------------------------- using UnityEngine; using UnityEngine.Events; using UnityEngine.EventSystems; using System.Collections.Generic; using System; [RequireComponent(typeof(RectTransform))] public class FakeButton : MonoBehaviour, IPointerClickHandler, IPointerDownHandler, IPointerUpHandler, IDragHandler { RectTransform m_RectTransform; public RectTransform rectTransform { get { return m_RectTransform ?? (m_RectTransform = this.transform as RectTransform); } } Action m_OnClick; public void AddListener(Action action) { m_OnClick += action; } public void RemoveAllListeners() { m_OnClick = null; } public void OnPointerUp(PointerEventData eventData) { PassEvent(eventData, ExecuteEvents.pointerUpHandler); } public void OnPointerDown(PointerEventData eventData) { PassEvent(eventData, ExecuteEvents.pointerDownHandler); } public void OnDrag(PointerEventData eventData) { PassEvent(eventData, ExecuteEvents.dragHandler); } public void OnPointerClick(PointerEventData eventData) { m_OnClick?.Invoke(); PassEvent(eventData, ExecuteEvents.submitHandler); PassEvent(eventData, ExecuteEvents.pointerClickHandler); } public void PassEvent(PointerEventData data, ExecuteEvents.EventFunction function) where T : IEventSystemHandler { List results = new List(); EventSystem.current.RaycastAll(data, results); GameObject current = data.pointerCurrentRaycast.gameObject; for (int i = 0; i < results.Count; i++) { if (current != results[i].gameObject) { if (ExecuteEvents.Execute(results[i].gameObject, data, function)) { break; } } } } }