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

89 lines
2.7 KiB
C#

using UnityEngine;
public class RotateAndMoveObjectAR : MonoBehaviour
{
public GameObject furniture;
public Camera arCamera;
public float rotationSpeed = 100f;
public float moveSpeed = 0.01f;
private bool isRotating;
private bool isMoving;
private Vector2 lastTouchPosition;
// Update is called once per frame
void Update()
{
HandleRotation();
HandleMovement();
}
void HandleRotation()
{
// Comprobar si hay un segundo dedo en la pantalla (para rotación)
if (Input.touchCount == 1)
{
Touch touch = Input.GetTouch(0);
if (touch.phase == TouchPhase.Began)
{
lastTouchPosition = touch.position;
isRotating = true;
}
else if (touch.phase == TouchPhase.Moved && isRotating)
{
Vector2 touchDelta = touch.position - lastTouchPosition;
float rotationAmount = touchDelta.x * rotationSpeed * Time.deltaTime;
// Rotar el objeto sobre el eje Y
furniture.transform.Rotate(0, -rotationAmount, 0);
lastTouchPosition = touch.position;
}
else if (touch.phase == TouchPhase.Ended || touch.phase == TouchPhase.Canceled)
{
isRotating = false;
}
}
}
void HandleMovement()
{
// Comprobar si hay un toque en la pantalla para mover el objeto
if (Input.touchCount == 1)
{
Touch touch = Input.GetTouch(0);
if (touch.phase == TouchPhase.Began)
{
Ray ray = arCamera.ScreenPointToRay(touch.position);
if (Physics.Raycast(ray, out RaycastHit hit))
{
if (hit.collider.gameObject == furniture)
{
isMoving = true;
}
}
}
else if (touch.phase == TouchPhase.Moved && isMoving)
{
// Calcular la nueva posición en el mundo
Ray ray = arCamera.ScreenPointToRay(touch.position);
if (Physics.Raycast(ray, out RaycastHit hit))
{
// Mueve el mueble al punto donde toca el rayo
furniture.transform.position = Vector3.Lerp(
furniture.transform.position,
hit.point,
moveSpeed
);
}
}
else if (touch.phase == TouchPhase.Ended || touch.phase == TouchPhase.Canceled)
{
isMoving = false;
}
}
}
}