using UnityEngine; using UnityEngine.Events; using UnityEngine.EventSystems; public class DraggablePolygonPoint : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler { //操作对应的下标 [SerializeField] int index = 0; [SerializeField] RectTransform parent; private bool dragging = false; public UnityEvent OnBeginDragEvent; public UnityEvent OnEndDragEvent; public UnityEvent OnDragEvent; Vector2 pointerOffset; RectTransform rect; void Awake() { rect = parent != null ? parent : (RectTransform)(transform); } public void OnBeginDrag(PointerEventData eventData) { dragging = true; pointerOffset = eventData.position - (Vector2)rect.position; OnBeginDragEvent.Invoke(index, rect.localPosition); } public void OnDrag(PointerEventData eventData) { if (dragging) { transform.position = eventData.position - pointerOffset; OnDragEvent.Invoke(index, rect.localPosition); } } public void OnEndDrag(PointerEventData eventData) { dragging = false; // 更新多边形的顶点等操作... pointerOffset = Vector2.zero; OnEndDragEvent.Invoke(index, rect.localPosition); } }