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.
Aufgabe
MittelStarte den Sprinter mit der Leertaste: nach unten in die Hocke, nach oben zum Laufen.
- In
Update(), wenn!runningundKeyboard.current.spaceKey.wasPressedThisFrame: setzeset, bewege dich umcrouchnach unten, protokolliereSet. - Wenn
setundwasReleasedThisFrame: setzesetzurück, setzerunning, bewege dich umcrouchnach oben, protokolliereGo!. - Solange
runninggilt, bewege dich mitspeedEinheiten 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
1Text auf dem Bildschirm
Canvas und TextPunktestand anzeigenZahlen formatierenEin Countdown-TimerRückblick: Tachometer2Buttons 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: Endlosläufer
Drei SpurenHindernisse voraus9Das neue Eingabesystem
Zwei EingabesystemeTastatur und MausIn diesem Frame gedrücktEingabeaktionenRückblick: EingabewechselÜbe selbstständig: Unity-Playground