Menu
CoddyTech

In diesem Frame gedrückt

Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 45 von 56.

isPressed beantwortet bei jedem Frame eines Gedrückthaltens die Frage „Ist die Taste gerade gedrückt?“. Wenn etwas nur einmal pro Tastendruck passieren soll, hat ein Steuerelement zwei weitere Antworten: wasPressedThisFrame ist nur in dem Frame true, in dem die Taste oder Maustaste gedrückt wird, und wasReleasedThisFrame nur in dem Frame, in dem sie wieder losgelassen wird. Sie ersetzen Input.GetKeyDown und Input.GetKeyUp sowie GetMouseButtonDown und GetMouseButtonUp. Dieser Stempel senkt sich, wenn die Maustaste gedrückt wird, und hebt sich, wenn sie losgelassen wird:

using UnityEngine;
using UnityEngine.InputSystem;

public class Stamp : MonoBehaviour
{
    public float drop = 0.5f;
    private int stamps;

    void Update()
    {
        Mouse mouse = Mouse.current;

        if (mouse.leftButton.wasPressedThisFrame)
        {
            transform.position += Vector3.down * drop;
            stamps++;
            Debug.Log("Stamp " + stamps);
        }
        if (mouse.leftButton.wasReleasedThisFrame)
        {
            transform.position += Vector3.up * drop;
        }
    }
}

Ein Klick, der eine halbe Sekunde lang gehalten wird, protokolliert einmal Stamp 1, bewegt den Stempel einmal nach unten und einmal wieder nach oben. Mit isPressed im ersten if würde derselbe Klick etwa 30 Stempel protokollieren und den Stempel 15 Einheiten tief in den Schreibtisch sinken lassen. Bei Tasten funktioniert es genauso: Keyboard.current.spaceKey.wasPressedThisFrame ist bei jedem Drücken der Leertaste einmal true.

challenge icon

Aufgabe

Mittel

Der Sprinter wartet in den Startblöcken. Sein Skript hat speed (6) und crouch (0.3).

  • Wenn die Leertaste gedrückt wird, duckt sich der Läufer in die Blöcke: Er bewegt sich crouch Einheiten nach unten, und Set wird protokolliert.
  • Wenn die Leertaste danach wieder losgelassen wird, richtet sich der Läufer wieder auf (crouch Einheiten nach oben), Go! wird protokolliert und der Lauf beginnt: Von da an läuft er mit speed Einheiten pro Sekunde entlang der +z-Achse.
  • Wenn die Leertaste gehalten wird, wird Set einmal protokolliert, nicht einmal pro Frame. Sobald der Läufer läuft, bewirkt die Leertaste nichts mehr.

Lies die Leertaste mit Keyboard.current aus. Drücke Play, halte die Leertaste gedrückt und lass sie los, dann Check.

Probier es selbst

using UnityEngine;
using UnityEngine.InputSystem;

public class Sprinter : MonoBehaviour
{
    public float speed = 6f;
    public float crouch = 0.3f;

    void Update()
    {
        // Space gedrückt: in die Hocke gehen und Set protokollieren. Space losgelassen: aufstehen, Go! protokollieren und loslaufen.
    }
}
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 Echte Spiele entwickeln