Menu
CoddyTech

Gedrückt, gehalten, losgelassen

Teil des Abschnitts Unity-Scripting: Grundlagen der Unity-Journey von Coddy. Lektion 19 von 85.

Unity kann dir drei verschiedene Dinge über eine Taste mitteilen, und nach jedem davon fragst du in Update():

  • Input.GetKeyDown(KeyCode.Space): Wurde die Leertaste in diesem Frame gedrückt? Das ist in einem Frame pro Tastendruck der Fall.
  • Input.GetKey(KeyCode.Space): Ist die Leertaste gerade gedrückt? Das ist in jedem Frame der Fall, während die Leertaste gedrückt gehalten wird.
  • Input.GetKeyUp(KeyCode.Space): Wurde die Leertaste in diesem Frame losgelassen? Das ist in einem Frame der Fall, wenn die Taste losgelassen wird.

Halte die Leertaste bei 60 Frames pro Sekunde eine halbe Sekunde lang gedrückt: Dann ist GetKey in 30 Frames wahr, GetKeyDown im ersten davon und GetKeyUp im Frame nach dem letzten. Eine Kanone, die einmal pro Tastendruck feuert, fragt GetKeyDown ab; mit GetKey würde ein Tastendruck 30 Schüsse abfeuern:

public int shots = 0;

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        shots++;
        Debug.Log("Shots fired: " + shots);
    }
}

GetKeyUp ist für das, was passiert, wenn der Spieler die Taste loslässt, zum Beispiel das Ende eines Sprints. Alle drei liefern nur eine Antwort für den aktuellen Frame. Deshalb gehören sie in Update(): Diese Methode wird in jedem Frame ausgeführt, während Start() einmal ausgeführt wird und fast jeden Tastendruck verpassen würde.

challenge icon

Aufgabe

Einfach

Die Schleuder lädt sich auf, solange die Leertaste gedrückt wird, und meldet beim Loslassen den Schuss.

  1. Addiere in Update(), solange Input.GetKey(KeyCode.Space) wahr ist, Time.deltaTime zu charge.
  2. Protokolliere bei Input.GetKeyUp(KeyCode.Space) "Charge: " + charge und setze dann charge auf 0.

Drücke „Spielen“, halte die Leertaste gedrückt und lass sie los: Die Console zeigt eine Zeile wie Charge: 1.5. Klicke dann auf „Prüfen“.

Probier es selbst

using UnityEngine;

public class Slingshot : MonoBehaviour
{
    float charge = 0f;

    void Update()
    {
        // Solange Space gedrückt gehalten wird: charge steigt jede Sekunde um 1.
        // Wenn Space losgelassen wird: Gib charge im Log aus und setze sie dann wieder auf 0.
    }
}

Alle Lektionen in Unity-Scripting: Grundlagen

Übe selbstständig: Unity-Playground