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.
Aufgabe
MittelDer 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
crouchEinheiten nach unten, undSetwird protokolliert. - Wenn die Leertaste danach wieder losgelassen wird, richtet sich der Läufer wieder auf (
crouchEinheiten nach oben),Go!wird protokolliert und der Lauf beginnt: Von da an läuft er mitspeedEinheiten pro Sekunde entlang der +z-Achse. - Wenn die Leertaste gehalten wird, wird
Seteinmal 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.
}
}
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
1Text auf dem Bildschirm
Canvas und TextPunktestand anzeigenZahlen formatierenEin Countdown-TimerRückblick: Tachometer4Szenen und Level
Eine Szene ladenDas Level neu startenNächstes LevelZwischen Szenen beibehaltenRückblick: Levelauswahl10Projekt: 3D-Plattformer
Der ParcoursBewegliche Plattformen2Buttons und Bildschirme
Buttons und onClickLambdasVerknüpfungen im InspectorPanels ein- und ausblendenGesundheitsbalkenRückblick: Upgrade-Shop5Speichern mit PlayerPrefs
Eine Zahl speichernMit einem Standardwert ladenHöchstpunktzahlEinstellungen speichernRückblick: Münzen auf der Bank3Der Spielmanager
Ein Skript steuert das SpielDas SingletonSpielzuständeZum Zustand wechselnRückblick: Rundenmanager6Projekt: Endlos-Runner
Drei SpurenHindernisse voraus9Das neue Eingabesystem
Zwei EingabesystemeTastatur und MausIn diesem Frame gedrücktEingabeaktionenRückblick: Eingabewechsel