Muovere oggetto su schermo se toccato con due dita

di il
0 risposte

Muovere oggetto su schermo se toccato con due dita

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;
        }
    }
}
Devi accedere o registrarti per scrivere nel forum
0 risposte