Removed TOTU 103
This commit is contained in:
		
							
								
								
									
										90
									
								
								Assets/Rendering/Scripts/Furniture/FurnitureDragger.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								Assets/Rendering/Scripts/Furniture/FurnitureDragger.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,90 @@ | ||||
| using System; | ||||
| using System.Collections.Generic; | ||||
| using UnityEngine; | ||||
| using UnityEngine.XR.ARFoundation; | ||||
| using UnityEngine.XR.ARSubsystems; | ||||
|  | ||||
| namespace Assets.Scripts.Furniture | ||||
| { | ||||
|     public class FurnitureDragger : MonoBehaviour | ||||
|     { | ||||
|         private Camera _mainCamera; | ||||
|         private ARRaycastManager _arRaycastManager; | ||||
|  | ||||
|         private bool _isDragging; | ||||
|         private bool _isRotating; | ||||
|         private Vector2 _initialTouchPosition; | ||||
|         private float _initialRotation; | ||||
|  | ||||
|         private void Start() | ||||
|         { | ||||
|             _mainCamera = Camera.main; | ||||
|             _arRaycastManager = FindFirstObjectByType<ARRaycastManager>(); | ||||
|         } | ||||
|  | ||||
|         private void Update() | ||||
|         { | ||||
|             if (Input.touchCount == 1) | ||||
|             { | ||||
|                 HandleDrag(); | ||||
|             } | ||||
|             else if (Input.touchCount == 2) | ||||
|             { | ||||
|                 HandleRotate(); | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         private void HandleRotate() | ||||
|         { | ||||
|             Touch touch = Input.GetTouch(0); | ||||
|  | ||||
|             if (touch.phase == TouchPhase.Began) | ||||
|             { | ||||
|                 Ray ray = _mainCamera.ScreenPointToRay(touch.position); | ||||
|                 if (Physics.Raycast(ray, out RaycastHit hit) && hit.transform == transform) | ||||
|                 { | ||||
|                     _isDragging = true; | ||||
|                 } | ||||
|             } | ||||
|             else if (touch.phase == TouchPhase.Moved && _isDragging) | ||||
|             { | ||||
|                 List<ARRaycastHit> hits = new(); | ||||
|                 if (_arRaycastManager.Raycast(touch.position, hits, TrackableType.PlaneWithinPolygon)) | ||||
|                 { | ||||
|                     Pose hitPose = hits[0].pose; | ||||
|                     transform.position = hitPose.position; | ||||
|                 } | ||||
|             } | ||||
|             else if (touch.phase == TouchPhase.Ended || touch.phase == TouchPhase.Canceled) { } | ||||
|             { | ||||
|                 _isDragging = false; | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         private void HandleDrag() | ||||
|         { | ||||
|             Touch touch1 = Input.GetTouch(0); | ||||
|             Touch touch2 = Input.GetTouch(1); | ||||
|  | ||||
|             if (touch1.phase == TouchPhase.Began || touch2.phase == TouchPhase.Began) | ||||
|             { | ||||
|                 // Registrar el ángulo inicial para la rotación | ||||
|                 Vector2 initialVector = touch2.position - touch1.position; | ||||
|                 _initialRotation = Mathf.Atan2(initialVector.y, initialVector.x) * Mathf.Rad2Deg; | ||||
|             } | ||||
|             else if (touch1.phase == TouchPhase.Moved || touch2.phase == TouchPhase.Moved) | ||||
|             { | ||||
|                 // Calcular el ángulo actual | ||||
|                 Vector2 currentVector = touch2.position - touch1.position; | ||||
|                 float currentRotation = Mathf.Atan2(currentVector.y, currentVector.x) * Mathf.Rad2Deg; | ||||
|  | ||||
|                 // Calcular la diferencia de ángulo y aplicar la rotación | ||||
|                 float deltaRotation = currentRotation - _initialRotation; | ||||
|                 transform.Rotate(Vector3.up, deltaRotation, Space.World); | ||||
|  | ||||
|                 // Actualizar el ángulo inicial | ||||
|                 _initialRotation = currentRotation; | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Ignacio Gómez Puga
					Ignacio Gómez Puga