using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.XR.ARFoundation; using UnityEngine.XR.ARSubsystems; public class DragAndDropManager : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler { public GameObject prefabToInstance; private ARRaycastManager arRaycastManager; // Asignable dinámicamente private Camera arCamera; // Asignable dinámicamente private GameObject draggedObject; // Método para asignar la cámara desde MeasuringSystem public void SetCamera(Camera camera) { if (camera == null) { Debug.LogError("Cámara proporcionada es nula."); return; } arCamera = camera; Debug.Log($"Cámara asignada: {arCamera.name}"); } // Método para asignar el ARRaycastManager desde MeasuringSystem public void SetARRaycastManager(ARRaycastManager raycastManager) { if (raycastManager == null) { Debug.LogError("ARRaycastManager proporcionado es nulo."); return; } arRaycastManager = raycastManager; Debug.Log($"ARRaycastManager asignado: {arRaycastManager.name}"); } public void OnBeginDrag(PointerEventData eventData) { if (prefabToInstance != null) { draggedObject = Instantiate(prefabToInstance); draggedObject.SetActive(false); } } public void OnDrag(PointerEventData eventData) { if (draggedObject != null) { if (arRaycastManager == null || arCamera == null) { Debug.LogWarning("ARRaycastManager o cámara no asignados. No se puede realizar el raycast."); return; } List hits = new List(); if (arRaycastManager.Raycast(eventData.position, hits, TrackableType.Planes)) { var hitPose = hits[0].pose; // Colocar el objeto en la posición AR detectada draggedObject.transform.position = hitPose.position; draggedObject.transform.rotation = hitPose.rotation; draggedObject.SetActive(true); } } } public void OnEndDrag(PointerEventData eventData) { if (draggedObject != null) { draggedObject = null; } } }