Menu
CoddyTech

In diesem Frame gedrückt

Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 46 von 60.

isPressed beantwortet bei jedem Frame eines gedrückt gehaltenen Knopfs die Frage „Ist er gerade gedrückt?“. Soll etwas nur einmal pro Tastendruck passieren, hat eine Steuerung zwei weitere Antworten: wasPressedThisFrame ist nur in dem Frame true, in dem die Taste oder Schaltfläche gedrückt wurde, und wasReleasedThisFrame nur in dem Frame, in dem sie wieder losgelassen wurde. Sie ersetzen Input.GetKeyDown und Input.GetKeyUp sowie GetMouseButtonDown und GetMouseButtonUp. Dieser Stempel senkt sich, wenn die Maustaste gedrückt wird, und hebt sich wieder, 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 wieder nach oben. Würde im ersten if isPressed verwendet, 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 genau einmal true.

challenge icon

Aufgabe

Mittel

Starte den Sprinter mit der Leertaste: nach unten in die Hocke, nach oben zum Laufen.

  1. In Update(), wenn !running und Keyboard.current.spaceKey.wasPressedThisFrame: setze set, bewege dich um crouch nach unten, protokolliere Set.
  2. Wenn set und wasReleasedThisFrame: setze set zurück, setze running, bewege dich um crouch nach oben, protokolliere Go!.
  3. Solange running gilt, bewege dich mit speed Einheiten pro Sekunde entlang der +z-Achse.

Klicke auf „Spielen“, halte die Leertaste gedrückt und lass sie los: Set, dann Go! in der Konsole. Klicke anschließend auf „Prüfen“.

Probier es selbst

using UnityEngine;
using UnityEngine.InputSystem;

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

    private bool set;
    private bool running;

    void Update()
    {
        // Space gedrückt: ducken und Set protokollieren. Space losgelassen: aufstehen, Go! protokollieren und loslaufen.
    }
}

Alle Lektionen in Echte Spiele entwickeln

Übe selbstständig: Unity-Playground