C# und Unity3D, während die Taste gedrückt wird
Ich bin sehr neu in C#. Ich bin etwas zu schaffen, was in der Einheit zu helfen, mich zu lernen, C# und Unity besser.
Möchte ich wissen, warum:
Input.GetKeyDown(KeyCode.UpArrow))
Feuert nur einmal gesetzt, wenn innerhalb:
void Update()
Seit dem update ist eine Schleife, warum wird er nicht gefeuert, während ich eine Taste gedrückt halten (in meinem Fall verursacht eine Sphäre zu bewegen)?
Habe ich es geschafft, es funktioniert durch die Verwendung von zwei bools, die geändert werden, wenn die Taste gedrückt und wieder losgelassen wird.
Hier ist mein vollständiges Skript, das ich spielen mit zu bewegen, einer Sphäre und simulieren Beschleunigung/Verzögerung:
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) ;
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Dokumentation sagt, dass dies der normalen, erwarteten Verhalten.
Die Sie wahrscheinlich verwenden wollen GetButton oder GetAxis statt, da diejenigen, die angeben, "gedrückt", solange die Taste gedrückt gehalten wird (GetButton gibt true zurück, GetAxis gibt 1 zurück).
Aus der Dokumentation auf Input.GetKeyDown.
Diese Methode ist besonders nützlich für das öffnen von Menüs oder andere events. Wie anhaltenden dialog.
Können Sie mit den Methoden, wie oben erwähnt, aber Sie können Input.GetKey Ihr Ziel zu erreichen.