DragDrop2D.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | using UnityEngine; public class DragDrop2D : MonoBehaviour { Vector3 offset; Collider2D collider2d; public string destinationTag = "DropArea" ; void Awake() { collider2d = GetComponent<Collider2D>(); } void OnMouseDown() { offset = transform.position - MouseWorldPosition(); } void OnMouseDrag() { transform.position = MouseWorldPosition() + offset; } void OnMouseUp() { collider2d.enabled = false ; var rayOrigin = Camera.main.transform.position; var rayDirection = MouseWorldPosition() - Camera.main.transform.position; RaycastHit2D hitInfo; if (hitInfo = Physics2D.Raycast(rayOrigin, rayDirection)) { if (hitInfo.transform.tag == destinationTag) { transform.position = hitInfo.transform.position + new Vector3(0, 0, -0.01f); } } collider2d.enabled = true ; } Vector3 MouseWorldPosition() { var mouseScreenPos = Input.mousePosition; mouseScreenPos.z = Camera.main.WorldToScreenPoint(transform.position).z; return Camera.main.ScreenToWorldPoint(mouseScreenPos); } } |