Wie macht man in Unity (C#) wenn eine Taste gedrückt und gehalten wird?
Moin!
Ich würde es so machen:
if (Input.GetKeyDown(KeyCode.Space))
{
gameObject.GetComponent<Rigidbody2D>().gravityScale = 1.5f;
if (CanJump == true && jumpArt == "standart")
{
JumpSpeed = 15;
Jump = true;
}
}
if (Input.GetKey(KeyCode.Space))
{
jumpArt = "Long";
if (CanJump == true)
{
JumpSpeed = 25;
Jump = true;
gameObject.GetComponent<Rigidbody2D>().gravityScale = 0.75f;
}
}
if (Jump == true)
{
transform.Translate(0, JumpSpeed * 0.004f, 0);
if (JumpSpeed != 0)
{
JumpSpeed -= 0.25f;
}
else
{
Jump = false;
}
}
Aber logischerweise springt er immer hoch, weil
Input.GetKey(KeyCode.Space))
auch für den Frame
Input.GetKeyDown(KeyCode.Space))
Wie kann ich das beheben?
Ich habe es schon mit Invoke("", ) versucht. Aber der wartet lange.
1 Antwort
C# weis ich grad nicht aber normalerweise hat ein event 4 zustände
0=nicht gedruckt
1=drücken
2=halten
3=loslassen
Also wenn man eine taste drückt wechselt der status immer
von 1 zu 2 zu 3 und wieder zu 0
und wenn man gedrückt hält, hält die 2 halt länger an, bis man es loslässt, dann wechselt er zu 3 und zu 0.
Aber wie gesagt , C# weis ich grad nicht, könnte es mir ähnlich oder gleich vorstellen
naja du könntest nach der if abfrage ob key==2 ist nen timer einbauen, der dir sagt wie lange die taste gerückt gehalten wird.
Und nach 2 erkunden gedrückt halten wir dann was ausgeführt.
und wenn key==3 ist dann wird der timer zurück gesetzt
Aber meine Frage erfüllt das nicht: Ich weiß ja nicht, wie ich mache, dass das Programm sieht, dass gerade die Leertaste gehalten wird. Ohne "Invoke".