using UnityEngine; using UnityEngine.Events; using UnityEngine.EventSystems;
namespace FrameCore.Asset.UI.Ext { ? ? public class OnDragStart : UnityEvent<GameObject> ? ? { ? ? }
? ? public class OnDrag : UnityEvent<GameObject> ? ? { ? ? }
? ? public class OnDragEnd : UnityEvent<GameObject> ? ? { ? ? }
? ? public interface IUIDrag ? ? { ? ? ? ? OnDragStart OnDragStart { get; set; } ? ? ? ? OnDragStart OnDrag { get; set; } ? ? ? ? OnDragStart OnDragEnd { get; set; } ? ? }
? ? public class UIDrag : MonoBehaviour, IUIDrag, IDragHandler, IBeginDragHandler, IEndDragHandler ? ? { ? ? ? ? public OnDragStart OnDragStart { get; set; } ? ? ? ? public OnDragStart OnDrag { get; set; } ? ? ? ? public OnDragStart OnDragEnd { get; set; }
? ? ? ? private Vector3 _mousePos;
? ? ? ? private RectTransform _rect;
? ? ? ? private void Awake() ? ? ? ? { ? ? ? ? ? ? OnDragStart = new OnDragStart(); ? ? ? ? ? ? OnDrag = new OnDragStart(); ? ? ? ? ? ? OnDragEnd = new OnDragStart(); ? ? ? ? ? ? _rect = GetComponent<RectTransform>(); ? ? ? ? }
? ? ? ? public void OnBeginDrag(PointerEventData eventData) ? ? ? ? { ? ? ? ? ? ? _mousePos = Input.mousePosition; ? ? ? ? ? ? OnDragStart?.Invoke(this.gameObject); ? ? ? ? }
? ? ? ? void IDragHandler.OnDrag(PointerEventData eventData) ? ? ? ? { ? ? ? ? ? ? _rect.anchoredPosition += (Vector2)(Input.mousePosition - _mousePos); ? ? ? ? ? ? _mousePos = Input.mousePosition; ? ? ? ? ? ? OnDrag?.Invoke(gameObject); ? ? ? ? }
? ? ? ? public void OnEndDrag(PointerEventData eventData) ? ? ? ? { ? ? ? ? ? ? OnDragEnd?.Invoke(this.gameObject); ? ? ? ? } ? ? } } ?
|