DraggablePolygonPoint.cs 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using UnityEngine;
  2. using UnityEngine.Events;
  3. using UnityEngine.EventSystems;
  4. public class DraggablePolygonPoint : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
  5. {
  6. //操作对应的下标
  7. [SerializeField]
  8. int index = 0;
  9. [SerializeField]
  10. RectTransform parent;
  11. private bool dragging = false;
  12. public UnityEvent<int,Vector3> OnBeginDragEvent;
  13. public UnityEvent<int,Vector3> OnEndDragEvent;
  14. public UnityEvent<int, Vector3> OnDragEvent;
  15. Vector2 pointerOffset;
  16. RectTransform rect;
  17. void Awake() {
  18. rect = parent != null ? parent : (RectTransform)(transform);
  19. }
  20. public void OnBeginDrag(PointerEventData eventData)
  21. {
  22. dragging = true;
  23. pointerOffset = eventData.position - (Vector2)rect.position;
  24. OnBeginDragEvent.Invoke(index, rect.localPosition);
  25. }
  26. public void OnDrag(PointerEventData eventData)
  27. {
  28. if (dragging)
  29. {
  30. transform.position = eventData.position - pointerOffset;
  31. OnDragEvent.Invoke(index, rect.localPosition);
  32. }
  33. }
  34. public void OnEndDrag(PointerEventData eventData)
  35. {
  36. dragging = false;
  37. // 更新多边形的顶点等操作...
  38. pointerOffset = Vector2.zero;
  39. OnEndDragEvent.Invoke(index, rect.localPosition);
  40. }
  41. }