diff --git a/Assets/Prefab/GridIndicator.prefab b/Assets/Prefab/GridIndicator.prefab new file mode 100644 index 0000000..3f0f8ee --- /dev/null +++ b/Assets/Prefab/GridIndicator.prefab @@ -0,0 +1,140 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &5236060892799482280 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8378628612892553542} + - component: {fileID: 8762927115585040554} + - component: {fileID: 6909481848820784089} + - component: {fileID: 3792725663845323067} + m_Layer: 0 + m_Name: Plane + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8378628612892553542 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5236060892799482280} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.3, y: 1, z: 0.3} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4410441032802257291} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!33 &8762927115585040554 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5236060892799482280} + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!23 &6909481848820784089 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5236060892799482280} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d5774351bc3ae4ad393dc1d142ff4235, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!64 &3792725663845323067 +MeshCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5236060892799482280} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 5 + m_Convex: 0 + m_CookingOptions: 30 + m_Mesh: {fileID: 10209, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &7069418182187326116 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4410441032802257291} + m_Layer: 0 + m_Name: GridIndicator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4410441032802257291 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7069418182187326116} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8378628612892553542} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/Assets/Prefab/GridIndicator.prefab.meta b/Assets/Prefab/GridIndicator.prefab.meta new file mode 100644 index 0000000..268ca45 --- /dev/null +++ b/Assets/Prefab/GridIndicator.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9d00637d689464a7aabd732cb44e1552 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Rendering/Scripts/New/DragAndDropManager.cs b/Assets/Rendering/Scripts/New/DragAndDropManager.cs index c936619..d9bee1e 100644 --- a/Assets/Rendering/Scripts/New/DragAndDropManager.cs +++ b/Assets/Rendering/Scripts/New/DragAndDropManager.cs @@ -8,24 +8,24 @@ using UnityEngine.XR.ARSubsystems; public class DragAndDropManager : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler { public GameObject prefabToInstance; + public GameObject gridPrefab; // Prefab del grid de detección - private ARRaycastManager arRaycastManager; // Asignable dinámicamente - private Camera arCamera; // Asignable dinámicamente + private ARRaycastManager arRaycastManager; + private ARAnchorManager arAnchorManager; // Se agrega ARAnchorManager para fijar los objetos + private Camera arCamera; private GameObject draggedObject; + private GameObject gridIndicator; // Instancia del grid - // Método para asignar la cámara desde MeasuringSystem public void SetCamera(Camera camera) { if (camera == null) { - Debug.LogError("Cámara proporcionada es nula."); + 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) @@ -34,7 +34,16 @@ public class DragAndDropManager : MonoBehaviour, IBeginDragHandler, IDragHandler return; } arRaycastManager = raycastManager; - Debug.Log($"ARRaycastManager asignado: {arRaycastManager.name}"); + } + + public void SetARAnchorManager(ARAnchorManager anchorManager) + { + if (anchorManager == null) + { + Debug.LogError("ARAnchorManager proporcionado es nulo."); + return; + } + arAnchorManager = anchorManager; } public void OnBeginDrag(PointerEventData eventData) @@ -44,36 +53,62 @@ public class DragAndDropManager : MonoBehaviour, IBeginDragHandler, IDragHandler draggedObject = Instantiate(prefabToInstance); draggedObject.SetActive(false); } + + // Crear el grid de detección + if (gridPrefab != null) + { + gridIndicator = Instantiate(gridPrefab); + gridIndicator.SetActive(false); + } } public void OnDrag(PointerEventData eventData) { - if (draggedObject != null) + if (draggedObject != null && arRaycastManager != null && arCamera != 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 + // Colocar el objeto en la posición AR detectada draggedObject.transform.position = hitPose.position; draggedObject.transform.rotation = hitPose.rotation; draggedObject.SetActive(true); + + // Mostrar el grid en la posición detectada + if (gridIndicator != null) + { + gridIndicator.transform.position = hitPose.position; + gridIndicator.SetActive(true); + } } } } public void OnEndDrag(PointerEventData eventData) { - if (draggedObject != null) + if (draggedObject != null && arAnchorManager != null) { + // Agregar un anclaje al objeto para fijarlo en su lugar + ARAnchor anchor = arAnchorManager.AddAnchor(new Pose(draggedObject.transform.position, draggedObject.transform.rotation)); + + if (anchor != null) + { + draggedObject.transform.SetParent(anchor.transform); // Hacer que el objeto sea hijo del anclaje + } + else + { + Debug.LogWarning("No se pudo crear un ARAnchor. El objeto podría moverse."); + } + draggedObject = null; } + + // Ocultar el grid una vez colocado el objeto + if (gridIndicator != null) + { + Destroy(gridIndicator); + } } } diff --git a/Assets/Scenes/ARScreen.unity b/Assets/Scenes/ARScreen.unity index b7a7dd4..9553e4a 100644 --- a/Assets/Scenes/ARScreen.unity +++ b/Assets/Scenes/ARScreen.unity @@ -691,8 +691,8 @@ MonoBehaviour: m_TargetGraphic: {fileID: 1498425121} m_HandleRect: {fileID: 1498425120} m_Direction: 0 - m_Value: -0.00000005086193 - m_Size: 0.37499678 + m_Value: -0.000000050861942 + m_Size: 0.37123078 m_NumberOfSteps: 0 m_OnValueChanged: m_PersistentCalls: @@ -787,6 +787,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: prefabToInstance: {fileID: 384462179027726530, guid: d7ca2b9d438a97e46b228f65e3ea34fd, type: 3} + gridPrefab: {fileID: 7069418182187326116, guid: 9d00637d689464a7aabd732cb44e1552, type: 3} --- !u!114 &518661788 MonoBehaviour: m_ObjectHideFlags: 0 @@ -1913,6 +1914,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: prefabToInstance: {fileID: 2065567086344354061, guid: d5ced78f2c9acf647bc91230db65e53d, type: 3} + gridPrefab: {fileID: 7069418182187326116, guid: 9d00637d689464a7aabd732cb44e1552, type: 3} --- !u!114 &1198553689 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2322,6 +2324,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: prefabToInstance: {fileID: 2415200880001261083, guid: 4217598f115eda443b059d1d3029157e, type: 3} + gridPrefab: {fileID: 7069418182187326116, guid: 9d00637d689464a7aabd732cb44e1552, type: 3} --- !u!114 &1510757703 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2492,6 +2495,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: prefabToInstance: {fileID: 1436977506181758233, guid: 5d852d0f90f588547b2ca56c0dd1340a, type: 3} + gridPrefab: {fileID: 7069418182187326116, guid: 9d00637d689464a7aabd732cb44e1552, type: 3} --- !u!114 &1824976693 MonoBehaviour: m_ObjectHideFlags: 0 @@ -2742,6 +2746,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: prefabToInstance: {fileID: 8617488083332643293, guid: 6749fe3471fc05847a373222f309879f, type: 3} + gridPrefab: {fileID: 7069418182187326116, guid: 9d00637d689464a7aabd732cb44e1552, type: 3} --- !u!114 &2016642937 MonoBehaviour: m_ObjectHideFlags: 0 diff --git a/Assets/Scenes/MeasuringSystem.unity b/Assets/Scenes/MeasuringSystem.unity index e97d0fb..db45b90 100644 --- a/Assets/Scenes/MeasuringSystem.unity +++ b/Assets/Scenes/MeasuringSystem.unity @@ -671,6 +671,7 @@ MonoBehaviour: m_HitDetectionType: 0 m_SphereCastRadius: 0.1 m_ConeCastAngle: 6 + m_LiveConeCastDebugVisuals: 0 m_RaycastMask: serializedVersion: 2 m_Bits: 4294967295 @@ -2429,7 +2430,7 @@ MonoBehaviour: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1776724014} - m_Enabled: 1 + m_Enabled: 0 m_EditorHideFlags: 0 m_Script: {fileID: 11500000, guid: e1760703bbd54c04488a8d10600262ab, type: 3} m_Name: @@ -3333,6 +3334,7 @@ MonoBehaviour: m_HitDetectionType: 0 m_SphereCastRadius: 0.1 m_ConeCastAngle: 6 + m_LiveConeCastDebugVisuals: 0 m_RaycastMask: serializedVersion: 2 m_Bits: 4294967295 diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index 04528b0..ac96722 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -145,14 +145,14 @@ PlayerSettings: - {fileID: 4800000, guid: b02d09082cbc14569ae46c12d9836abc, type: 3} - {fileID: 4800000, guid: f40a6c94c8e1b494d93d434ae522a14f, type: 3} - {fileID: 4800000, guid: 0f45334fa661448c886e4f99ba812a7e, type: 3} - - {fileID: 901716690356561315, guid: e04dc9557a6bcec40b5d8576988f74a3, type: 2} - - {fileID: 11400000, guid: 6bfaaf31cb485f64fb956f1d691a0e1d, type: 2} - - {fileID: -5070790411771939123, guid: 228964b93c232624fac8c242b79176e5, type: 2} - - {fileID: 11400000, guid: 911becadf2ac07e4da62b8afa0b9ea7f, type: 2} - - {fileID: 4800000, guid: e7c77f6eaab324a819efdc13b8125a39, type: 3} - - {fileID: 4800000, guid: 6743a50a812740be8c0aa3fccc46fae9, type: 3} - {fileID: 4800000, guid: b1d4c517492046e1a4e4cc49b0b73b42, type: 3} - {fileID: 4800000, guid: 2b7e3540272684e0b8e12fed2c4609de, type: 3} + - {fileID: 4800000, guid: c9f956787b1d945e7b36e0516201fc76, type: 3} + - {fileID: 4800000, guid: 0945859e5a1034c2cb6dce53cb4fb899, type: 3} + - {fileID: 479186601668263405, guid: e04dc9557a6bcec40b5d8576988f74a3, type: 2} + - {fileID: 11400000, guid: 6bfaaf31cb485f64fb956f1d691a0e1d, type: 2} + - {fileID: -7180841881952691092, guid: 228964b93c232624fac8c242b79176e5, type: 2} + - {fileID: 11400000, guid: 911becadf2ac07e4da62b8afa0b9ea7f, type: 2} metroInputSource: 0 wsaTransparentSwapchain: 0 m_HolographicPauseOnTrackingLoss: 1