• Benvenuto in Making Videogames!
  • Dai sfogo alla tua fantasia!
  • Crea il tuo Videogioco!
Benvenuto ospite! Login Registrati




Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
Rilevamento coordinate touch per calcolo inerzia
#1
Ciao a tutti, ho un piccolo problemino.. In pratica vorrei usare il touch per muovere la telecamera sul mio livello di gioco (mappa stile clash of clans) e al rilascio del touch applicare un inerzia alla camera.
Il problema che ho non sta nel muovere o applicare l'inerzia, ma tanto alla forza da darle e alla velocità. 
Questo perchè ho notato  che se io vado a calcolare lo spostamento del touch dalla posizione precedente a quella corrente (rilevando quindi velocità e direzione in cui applicherò l'inerzia) al rilascio ho spesso un balzo che non mi permette di applicare la velocità corretta in uscita, quindi invece di rallentare, la cam prima ha un accelerazione inutile e poi rallenta.

Esempio rilevazioni (distanza tra position e delta position) : 
0.4
0.2
0.3
0.7
0.6
3.4

.. quindi passa da una media bassa.. al rilascio mouse con uno scatto improvviso

PS: Volevo provare a cercare sul forum ma non mi accede alla casella di ricerca, Volevo allegare 2 screen dei risultati del debugger di unity ma non riesco ad allegarli, dici formato nn valido. Sono due jpeg da circa 300kb


Grazie a tuttii!!!!
 
Rispondi
#2
Se riuscissi a mandarci il codice sarebbe meglio Smile
 
Rispondi
#3
globale : 
private Vector2?[] coordPrecedenti = { null, null }; // Array
private Vector2 coordCorrenti;
private Vector2 nuoveCoordinate;

in Update :


if (!Input.GetMouseButton (0) && Input.touchCount == 0) {
   coordPrecedenti [0] = null;
    coordPrecedenti [1] = null;
}

if ((Input.GetMouseButton (0) && Input.touchCount == 0) || Input.touchCount == 1) {

   if (coordPrecedenti [0] == null || coordPrecedenti [1] != null) {
       coordPrecedenti [0] = coordinateInput ();
       coordPrecedenti [1] = null;
       Debug.Log ("Single touch" + linea + "________________________");
    } else {
        coordCorrenti = coordinateInput ();
        nuoveCoordinate = ((Vector2)coordPrecedenti [0] - coordCorrenti);
        Debug.Log("Sposta di " + nuoveCoordinate);

.... 
La funzione coordinateInput :
Vector2 coordinateInput(int nrTocco = 0) {
    if (Input.touchCount > 0) {  
        int controllaTouch = ((Input.touchCount == (nrTocco + 1)) ? nrTocco : 0);
         return Input.GetTouch (nrTocco).position;
    } else {
        //Debug.Log ("Controllo tramite mouse ");
        return Input.mousePosition;
    }
}



Nulla di complicato insomma.. ma nn capisco xkè ha una irregolarità assurda ..   Comunque nn riesco a postare lo screen ..  in che formato e che dimensioni accetta qui ? Grazie
 
Rispondi
#4
Scusa il ritardo della risposta, ma sono stato parecchio impegnato. Comunque ho controllato da me lo fa ogni tanto e non ho capito cosa sia Sad
 
Rispondi
#5
e si.. il senso effettivamente cè .. solo bisogna inventarsi un modo per ovviare a questi scatti improvvisi..
 
Rispondi
  


Vai al forum:


Browsing: 1 Ospite(i)