Tastatur und Maus
Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 45 von 60.
Das Input System stellt jedem Gerät ein Objekt bereit. Keyboard.current ist die Tastatur, und jede Taste darauf ist eine Steuerung mit einem Namen: spaceKey, aKey, upArrowKey oder Keyboard.current[Key.Space] für eine beliebige Taste anhand ihres Key-Werts. Mouse.current ist die Maus mit leftButton, rightButton und position. isPressed einer Steuerung ist in jedem Frame true, in dem sie gedrückt gehalten wird, so wie es bei Input.GetKey der Fall war. Dieses U-Boot taucht mit den Pfeiltasten ab und wieder auf und schaltet seinen Suchscheinwerfer ein, solange die Maustaste gedrückt gehalten wird:
using UnityEngine;
using UnityEngine.InputSystem;
public class Submarine : MonoBehaviour
{
public float diveSpeed = 2f;
public Light searchlight;
void Update()
{
Keyboard keyboard = Keyboard.current;
if (keyboard == null) return; // keine Tastatur angeschlossen
if (keyboard.downArrowKey.isPressed)
transform.position += Vector3.down * diveSpeed * Time.deltaTime;
if (keyboard.upArrowKey.isPressed)
transform.position += Vector3.up * diveSpeed * Time.deltaTime;
searchlight.enabled = Mouse.current != null && Mouse.current.leftButton.isPressed;
}
}current ist das zuletzt verwendete Gerät und ist null, wenn keines vorhanden ist: Ein Smartphone oder eine Konsole hat möglicherweise keine Tastatur, und die Nullprüfungen verhindern, dass das Skript dort einen Fehler auslöst. Die Tastatur hat keine Achsen, daher sind die Pfeiltaste nach unten und S zwei separate Tasten: Ein U-Boot, das auch bei S abtauchen soll, prüft keyboard.downArrowKey.isPressed || keyboard.sKey.isPressed. Mouse.current.position.ReadValue() liefert den Zeiger als Vector2 in Bildschirmpixeln, gemessen von der unteren linken Ecke aus, genau wie Input.mousePosition.
Aufgabe
MittelSteuere den Heißluftballon mit Keyboard.current und Mouse.current.
- Wenn
rightArrowKeyoderdKeyisPressedist, driftest du mitdriftEinheiten pro Sekunde entlang +x; beileftArrowKeyoderaKeyentlang -x. bool burnerist wahr, wennspaceKeyoderleftButtongedrückt ist; rufeflame.SetActive(burner);auf.- Brenner an: Steige mit
riseauf; Brenner aus: Sink mitsink, aber nie untergroundY.
Drücke „Spielen“ und fliege: Halte die Leertaste oder die Maustaste gedrückt, um aufzusteigen. Drücke dann „Prüfen“.
Probier es selbst
using UnityEngine;
using UnityEngine.InputSystem;
public class Balloon : MonoBehaviour
{
public float drift = 2f;
public float rise = 3f;
public float sink = 1f;
public float groundY = 2f;
public GameObject flame;
void Update()
{
// Mit den Pfeiltasten oder A und D treiben, mit Space oder der Maus den Brenner betätigen
}
}
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