2012-07-06 19 views
8

Sono molto nuovo in C#. Sto creando qualcosa in Unity per aiutarmi ad imparare meglio C# e Unity.C# e Unity3D mentre si preme il tasto

Voglio sapere perché:

Input.GetKeyDown(KeyCode.UpArrow)) 

spara Solo una volta, quando sono immessi entro:

void Update() 

dall'aggiornamento è un ciclo, perché non viene sparato mentre tengo la chiave verso il basso (in il mio caso fa spostare una sfera)?

Sono riuscito a farlo funzionare utilizzando due bool che vengono modificati quando il tasto viene premuto e rilasciato.

Ecco il mio script completo che sto giocando con a spostare una sfera e simulare l'accelerazione/decelerazione:

using UnityEngine; 
using System.Collections; 

public class sphereDriver : MonoBehaviour { 
int x ; 
bool upPressed = false ; 
bool downPressed = false ; 
void Start() 
{ 
    x = 0 ; 
} 

void Update() 
{ 
    if(x > 0) { 
     x -= 1 ; 
    } 
    if(x < 0) { 
     x += 1 ; 
    } 
    if(Input.GetKeyDown(KeyCode.UpArrow)) 
    { 
     upPressed = true ; 
    } 
    else if(Input.GetKeyUp(KeyCode.UpArrow)) 
    { 
     upPressed = false ; 
    } 

    if(upPressed == true) 
    { 
     x += 5 ; 
    } 

    if(Input.GetKeyDown(KeyCode.DownArrow)) 
    { 
     downPressed = true ; 
    } 
    else if(Input.GetKeyUp(KeyCode.DownArrow)) 
    { 
     downPressed = false ; 
    } 

    if(downPressed == true) 
    { 
     x -= 5 ; 
    } 

    transform.Translate(x * Time.deltaTime/10, 0, 0) ; 
} 

} 

risposta

6

Il documentation dice che questo è il normale, comportamento previsto.

Probabilmente si desidera utilizzare GetButton o GetAxis invece, poiché quelli indicano "premuto" finché il tasto viene tenuto premuto (GetButton restituisce true, GetAxis restituisce 1).

+0

Grazie! Dal momento che queste due funzioni sono specifiche di Unity, il modo in cui l'ho fatto in origine è ciò che la maggior parte farebbe per ottenere ciò che volevo in C#? – imperium2335

+0

Sì, questo sarebbe un modo comune per farlo. – redtuna

5

Dalla documentazione su Input.GetKeyDown.

È necessario chiamare questa funzione dalla funzione di aggiornamento, poiché lo stato viene reimpostato su ciascun fotogramma. Non restituirà true finché l'utente non ha rilasciato la chiave e lo ha premuto di nuovo.

Questo metodo è particolarmente utile per l'apertura di menu o altri eventi singoli. Come il dialogo continuo.

È possibile utilizzare i metodi indicati sopra, tuttavia è possibile utilizzare Input.GetKey per raggiungere il proprio obiettivo.

Restituisce vero mentre l'utente tiene premuto il tasto identificato dal nome.

Problemi correlati