using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; using TMPro; public class DraggableCard : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler { public string layerName; private RectTransform rectTransform; private CanvasGroup canvasGroup; private Vector2 startPosition; private Transform startParent; private Canvas canvas; void Awake() { rectTransform = GetComponent(); canvasGroup = GetComponent(); if (canvasGroup == null) canvasGroup = gameObject.AddComponent(); canvas = GetComponentInParent(); } void Start() { startPosition = rectTransform.anchoredPosition; startParent = transform.parent; } public void OnBeginDrag(PointerEventData eventData) { if (transform.parent != startParent) { DropZone currentZone = transform.parent.GetComponent(); if (currentZone != null) currentZone.currentCard = null; } transform.SetParent(canvas.transform); transform.SetAsLastSibling(); canvasGroup.blocksRaycasts = false; } public void OnDrag(PointerEventData eventData) { rectTransform.anchoredPosition += eventData.delta / canvas.scaleFactor; } public void OnEndDrag(PointerEventData eventData) { canvasGroup.blocksRaycasts = true; if (transform.parent == canvas.transform) ReturnToOriginal(); } public void ReturnToOriginal() { transform.SetParent(startParent); rectTransform.anchoredPosition = startPosition; } }