• 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
Problema precisione e reattività su touchscreen Android
#1
Dunque il problema è questo.... sto sviluppando un giochino per Android, però sto riscontrando qualche problema nelle varie interazioni con gli oggetti: spesso fallisce il raycasting quindi bisogna provare e riprovare varie volte prima che l'interazione abbia successo, e questo può risultare un tantino scocciante per il giocatore, soprattutto se queste operazioni richiedono un certo tempismo; oppure ogni tanto lo script si perde una TouchPhase.Ended e quindi l'interazione rimane bloccata nella TouchPhase.Moved fino a quando non si tocca nuovamente lo schermo.
Anche questo può causare qualche fastidio.

Sono convinto che ci sia qualche problema a livello di codice/concettuale, anche perchè è la prima volta che sviluppo qualcosa per Mobile; diciamo che manca forse un qualche controllo in più per ottimizzare le operazioni e per assicurarsi che vadano a buon fine quando devono.

Metto qui parte dello script così magari da capirsi meglio...

Codice:
if (Input.touches.Length > 0) {
    if (Input.GetTouch(0).phase == TouchPhase.Began) {
    raggio = Camera.main.ScreenPointToRay(Input.GetTouch(0).position);
            if (Physics.Raycast(raggio,out hit)) {
             if (hit.transform.tag == "Pushable") {
                goodHit = true;
            myRB = hit.rigidbody;
             }
             startPos = Input.GetTouch(0).position;
        }
    }    
    if ((Input.GetTouch(0).phase == TouchPhase.Moved)&&(goodHit == true)) {
        dragging = true;
        intensity++;
        if (intensity > 75) intensity = 75;
    }
    if ((Input.GetTouch(0).phase == TouchPhase.Ended)&&(goodHit == true)) {
        dragging = false;
        goodHit = false;
        endPos = Input.GetTouch(0).position;
        if (endPos.x > startPos.x) {
            spinta.x = 1;
        } else {
            spinta.x = -1;        
        }
        if (myRB.CompareTag("Pushable")) {        
            myRB.AddForce(spinta*intensity, ForceMode.Impulse);
            intensity = 0;
        }
    }                
}

La stessa cosa nella versione per PC funzionava senza problemi, usavo solo le funzioni del mouse, senza raycasting, quindi era molto più semplice la cosa. Poi ho fatto il porting per Android e chiaramente ho incontrato qualche problema.
Any idea ?
 
Rispondi
#2
Trovata la soluzione al problema, o almeno per me è risultata esserlo.
La scrivo dunque qui sotto così se qualcun altro si dovesse trovare nella stessa situazione almeno può uscirne agevolmente.

Non era un problema di codice... il frammento riportato sopra è corretto e funzionante, il problema era che questo pezzo di codice andava poi ad attivare delle Forze che agivano sui rigidbody, per questo motivo avevo inserito il tutto in FixedUpdate() {come suggerivano numerosi totorial e forse anche la documentazione di unity stesso.} Peccato però che le TouchPhase sviluppino non pochi problemi con FixedUpdate(), perchè dal momento che le fasi vengono analizzate ad ogni frame, capitava ogni tanto che venisse perso proprio quel frame in cui si valutava la touchphase.ended causando la mancata esecuzione del blocco di codice al suo interno :\

Per quanto riguarda invece le mancate interazioni con alcuni oggetti credo sia solo un problema di collider piccolini che ogni tanto vengono mancati dal Raycast, perchè di fatto quando si tocca lo schermo è possibile che anche se si sta "toccando" l'oggetto, la prima molecola del dito che entra in contatto con lo schermo in realtà sia fuori dal collider dell'oggetto interessato, causando così il miss visto che il raggio è di sezione puntiforme. Ora quindi stò lavorando ad una funzione che consenta un po' più di lasco sul raycast.

tl;dr: Non inserire controlli sulle fasi di tocco all'interno di FixedUpdate().
 
Rispondi
  


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  Collegare un'activity Android a Unity Giuseppe_12 0 211 15-07-2017, 04:01 PM
Ultimo messaggio: Giuseppe_12
  Problema su salvataggio e caricamento 93sunderland 2 639 08-07-2016, 06:07 PM
Ultimo messaggio: Thejuster
  Luci pesanti su gioco VR per Android con Unity Refref1990 1 712 13-08-2015, 11:20 PM
Ultimo messaggio: eoasier
  Compilare un gioco in android Master Gabriel 16 1,272 02-04-2015, 10:40 AM
Ultimo messaggio: Master Gabriel
  controllo su android (unity3d) nonsoil2 3 607 23-01-2015, 04:40 PM
Ultimo messaggio: Zettamax

Vai al forum:


Browsing: 1 Ospite(i)