using UnityEngine; using UnityEngine.UI; using UnityEngine.EventSystems; public class UIDragSpawner : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler { public RectTransform rectTransform; public LayerMask mask; private GameObject dragPreview; public SimulationModel targetModel; //private CanvasGroup canvasGroup; void Awake() { } public void SetInfo(SimulationModel spawnTarget, Sprite thumbnail) { this.GetComponent().sprite = thumbnail; targetModel = spawnTarget; } public void OnBeginDrag(PointerEventData eventData) { dragPreview = Instantiate(targetModel).gameObject; } public void OnDrag(PointerEventData eventData) { if (dragPreview) { Ray ray = Camera.main.ScreenPointToRay(eventData.position); if (Physics.Raycast(ray, out RaycastHit hit, 100.0f, mask)) { dragPreview.transform.position = hit.point; } } } public void OnEndDrag(PointerEventData eventData) { if (IsPointerOverScrollRect(rectTransform)) { Destroy(dragPreview); dragPreview = null; return; } else { DataManager.I.AddModel(dragPreview.GetComponent()); } } public bool IsPointerOverScrollRect(RectTransform rt) { return RectTransformUtility.RectangleContainsScreenPoint(rt, Input.mousePosition); } }