Files
ImaageQ_Unity_App/Assets/Rendering/Scripts/New/DragAndDropManager.cs
Ignacio Gómez Puga 5847d844a5 Removed TOTU 103
2025-03-04 12:04:52 -06:00

80 lines
2.4 KiB
C#

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<ARRaycastHit> hits = new List<ARRaycastHit>();
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;
}
}
}