Menu
CoddyTech

Gedrückt, gehalten, losgelassen

Teil des Abschnitts Grundlagen des Scripting in Unity der Unity-Journey von Coddy. Lektion 12 von 67.

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

  • Input.GetKeyDown(KeyCode.Space): Wurde Space in diesem Frame gedrückt? Bei jedem Drücken ist der Wert in genau einem Frame true.
  • Input.GetKey(KeyCode.Space): Ist Space gerade gedrückt? Der Wert ist in jedem Frame true, solange Space gedrückt gehalten wird.
  • Input.GetKeyUp(KeyCode.Space): Wurde Space in diesem Frame losgelassen? Der Wert ist in genau einem Frame true, wenn die Taste losgelassen wird.

Wenn du Space bei 60 Frames pro Sekunde eine halbe Sekunde lang gedrückt hältst, ist GetKey in 30 Frames true, GetKeyDown im ersten davon und GetKeyUp im Frame nach dem letzten. Eine Kanone, die pro Tastendruck einmal 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 wenn ein Sprint endet. Alle drei liefern nur für den aktuellen Frame eine Antwort. 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 gehalten wird: charge erhöht sich für jede Sekunde, in der die Leertaste gedrückt gehalten wird, um 1 und erhöht sich nicht, wenn sie nicht gedrückt gehalten wird. Wenn die Leertaste losgelassen wird, gib Charge: gefolgt von der Ladung aus (zum Beispiel Charge: 1.5) und setze dann charge für den nächsten Schuss auf 0 zurück.

Drücke Play, halte die Leertaste gedrückt und lasse sie los. Beobachte die Console. Drücke dann Check.

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: charge protokollieren und dann auf 0 zurücksetzen.
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen des Scripting in Unity