2012-07-06 10 views
8

Ich bin sehr neu in C#. Ich erschaffe etwas in Unity, damit ich C# und Unity besser lernen kann.C# und Unity3D während der Schlüssel gedrückt wird

Ich möchte wissen, warum:

Input.GetKeyDown(KeyCode.UpArrow)) 

Nur einmal ausgelöst, wenn platziert in:

void Update() 

Seit Update ist eine Schleife, warum ist es nicht gebrannt, während ich die Taste gedrückt halten (in mein Fall verursacht eine Kugel zu bewegen)?

Ich habe es geschafft, es funktioniert mit zwei Bools, die geändert werden, wenn die Taste gedrückt und losgelassen wird.

Hier ist mein ganzes Skript, das ich mit spiele eine Kugel zu bewegen und Beschleunigung/Abbremsung simulieren:

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

} 

Antwort

6

Die documentation sagen, dass dies das normale, erwartete Verhalten ist.

Wahrscheinlich möchten Sie stattdessen GetButton oder GetAxis verwenden, da diese "gedrückt" anzeigen, solange die Taste gedrückt gehalten wird (GetButton gibt true zurück, GetAxis gibt 1 zurück).

+0

Danke! Da diese beiden Funktionen Unity-spezifisch sind, würde die Art und Weise, wie ich es gemacht habe, ursprünglich das sein, was die meisten tun würden, um das zu erreichen, was ich nur in C# wollte? – imperium2335

+0

Ja, das wäre ein üblicher Weg. – redtuna

5

Aus der Dokumentation zu Input.GetKeyDown.

Sie müssen diese Funktion über die Update-Funktion aufrufen, da der -Status für jeden Frame zurückgesetzt wird. Es wird nicht wahr zurückgegeben, bis der Benutzer die Taste losgelassen hat und erneut gedrückt hat.

Diese Methode ist am nützlichsten zum Öffnen von Menüs oder anderen einmaligen Ereignissen. Zum Beispiel den fortgesetzten Dialog.

Sie können die oben genannten Methoden verwenden, jedoch können Sie Input.GetKey verwenden, um Ihr Ziel zu erreichen.

Gibt True zurück, während der Benutzer den identifizierten Schlüssel festhält.