Menu
CoddyTech

Tastatur und Maus

Teil des Abschnitts Echte Spiele entwickeln der Unity-Journey von Coddy. Lektion 44 von 56.

Das Input System gibt jedem Gerät ein Objekt. Keyboard.current ist die Tastatur, und jede Taste darauf ist ein Steuerelement 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 eines Steuerelements ist in jedem Frame true, in dem es gedrückt gehalten wird, so wie es bei Input.GetKey der Fall war. Dieses U-Boot taucht mit den Pfeiltasten und steigt auf, und seine Suchscheinwerfer leuchten, 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 Telefon 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 mit S tauchen soll, prüft keyboard.downArrowKey.isPressed || keyboard.sKey.isPressed. Mouse.current.position.ReadValue() liefert die Zeigerposition als Vector2 in Bildschirmpixeln, gemessen von der unteren linken Ecke aus, wie Input.mousePosition.

challenge icon

Aufgabe

Mittel

Steuere den Heißluftballon mit dem Input System. Sein Skript hat drift (2), rise (3), sink (1), groundY (2) und flame, die Flamme des Brenners unter dem Ballon.

  • Solange die rechte Pfeiltaste oder D gedrückt gehalten wird, driftet der Ballon mit drift Einheiten pro Sekunde nach rechts (entlang +x); solange die linke Pfeiltaste oder A gedrückt gehalten wird, driftet er nach links.
  • Der Brenner ist eingeschaltet, solange die Leertaste oder die linke Maustaste gedrückt gehalten wird. Zeige flame nur an, wenn er eingeschaltet ist.
  • Bei eingeschaltetem Brenner steigt der Ballon mit rise Einheiten pro Sekunde. Ist er ausgeschaltet, sinkt er mit sink Einheiten pro Sekunde und niemals unter groundY.

Verwende Keyboard.current und Mouse.current. Dieses Projekt ist wie ein neues Unity 6-Projekt eingerichtet (Active Input Handling: Input System Package), daher löst die Klasse Input hier eine InvalidOperationException aus. Drücke Play und steuere den Ballon, dann Check.

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()
    {
        // Steuere mit den Pfeiltasten oder A und D, zünde den Brenner mit Space oder der Maus
    }
}
quiz iconTeste dich selbst

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