Menu
CoddyTech

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.

challenge icon

Aufgabe

Mittel

Steuere den Heißluftballon mit Keyboard.current und Mouse.current.

  1. Wenn rightArrowKey oder dKey isPressed ist, driftest du mit drift Einheiten pro Sekunde entlang +x; bei leftArrowKey oder aKey entlang -x.
  2. bool burner ist wahr, wenn spaceKey oder leftButton gedrückt ist; rufe flame.SetActive(burner); auf.
  3. Brenner an: Steige mit rise auf; Brenner aus: Sink mit sink, aber nie unter groundY.

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

Übe selbstständig: Unity-Playground