2012-07-06 13 views
8

Jestem bardzo nowy w C#. Tworzę coś w Unity, aby pomóc mi lepiej uczyć się C# i Unity.C# i Unity3D podczas naciskania klawisza

Chcę wiedzieć dlaczego:

Input.GetKeyDown(KeyCode.UpArrow)) 

Tylko odpala raz po umieszczeniu w ciągu:

void Update() 

Ponieważ zmiana jest pętla, dlaczego nie wystrzelił, a ja przytrzymaj klawisz w dół (w mój przypadek powodujący poruszenie kuli)?

Udało mi się sprawić, żeby działało, używając dwóch zmiennych, które są zmieniane po naciśnięciu i zwolnieniu klawisza.

Oto mój pełny skrypt, który gram z przenieść kulę i symulować przyspieszania/zwalniania:

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) ; 
} 

} 

Odpowiedz

6

documentation mówi, że jest to normalne, oczekiwane zachowanie.

Zamiast tego prawdopodobnie użyjemy GetButton lub GetAxis, ponieważ wskazują one "wciśnięty" tak długo, jak długo klawisz jest wciśnięty (GetButton zwraca true, GetAxis zwraca 1).

+0

Dzięki! Ponieważ te dwie funkcje są specyficzne dla jedności, czy sposób, w jaki zrobiłem to pierwotnie, byłby tym, co większość zrobiłaby, aby osiągnąć to, co chciałem w C#? – imperium2335

+0

Tak, byłby to powszechny sposób na zrobienie tego. – redtuna

5

Z dokumentacji na Input.GetKeyDown.

Musisz wywołać tę funkcję z funkcją aktualizacji, ponieważ stan dostaje zresetować każdą klatkę. Nie zwróci wartości true dopóki użytkownik nie zwolni klawisza i nie naciśnie go ponownie.

Ta metoda jest najbardziej przydatna do otwierania menu lub innych jednorazowych zdarzeń. Takich jak ciągłe okno dialogowe.

Możesz korzystać z metod wymienionych powyżej, jednak możesz użyć Input.GetKey, aby osiągnąć swój cel.

Zwraca wartość true, gdy użytkownik przytrzymuje klawisz określony przez nazwę.

Powiązane problemy