Ciao a tutti,
Sto cercando un modo per poter trascinare un oggetto 3D in gioco su Unity solo se i tocchi rilevati sullo schermo coincidono con la sua posizione.
Ad esempio, ho un cubo, voglio spostarlo lungo gli assi x ed y, lo tocco prima con un dito, e in questo caso non succede nulla. Dopo posiziono un altro dito sull'oggetto, e in questo caso dopo aver verificato che i tocchi sono sull'oggetto posso spostarlo, ma se una delle dita viene tolta dal touch, oppure esce dallo spazio dell'oggetto, quest'ultimo si ferma.
Questo è lo script utilizzato che mi permette di spostare l'oggetto se vengono toccati due punti qualsiasi dello schermo:
using System.Collections;
using UnityEngine;
public class ShapeMovement : MonoBehaviour
{
[SerializeField]
private float shapeSpeed = 1f;
private TouchControls touchControls;
private Coroutine MoveCoroutine;
private Transform shapeTransform;
private Vector2 initialTouchPosition;
private void Awake()
{
shapeTransform = transform;
touchControls = new TouchControls();
}
private void OnEnable()
{
touchControls.Enable();
}
private void OnDisable()
{
touchControls.Disable();
}
private void Start()
{
touchControls.Touch.SecondaryTouchContact.started += _ => MoveStart();
touchControls.Touch.SecondaryTouchContact.canceled += _ => MoveEnd();
}
private void MoveStart()
{
initialTouchPosition = touchControls.Touch.SecondFinger.ReadValue<Vector2>();
MoveCoroutine = StartCoroutine(MoveCube());
}
private void MoveEnd()
{
StopCoroutine(MoveCoroutine);
}
IEnumerator MoveCube()
{
while (true)
{
Vector2 currentTouchPosition = touchControls.Touch.SecondFinger.ReadValue<Vector2>();
Vector2 touchDelta = currentTouchPosition - initialTouchPosition;
Vector3 moveDirection = new Vector3(touchDelta.x, touchDelta.y, 0f);
shapeTransform.Translate(moveDirection * shapeSpeed * Time.deltaTime, Space.World);
initialTouchPosition = currentTouchPosition;
yield return null;
}
}
}