Menu
CoddyTech

Eingabeaktionen

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

Wenn du Tasten einzeln abfragst, bindest du ein Skript an die Tastatur. Eine Aktion bezeichnet stattdessen, was der Spieler tut, und im Projekt wird festgelegt, welche Tasten, Sticks und Knöpfe sie auslösen. Ein neues Unity-6-Projekt enthält eine Reihe solcher Aktionen (das Asset InputSystem_Actions, das als projektweite Aktionen festgelegt ist). Die Player-Map enthält Move (WASD, die Pfeiltasten und den linken Stick eines Gamepads), Look (die Maus oder den rechten Stick), Attack (die linke Maustaste und Enter), Interact (E, gedrückt halten), Crouch (C), Jump (Leertaste und die südliche Taste des Gamepads), Previous und Next (1 und 2) sowie Sprint (linke Umschalttaste). Sie sind von Anfang an aktiviert, und mit InputSystem.actions.FindAction("Jump") erhältst du eine Aktion anhand ihres Namens. Dieser seitlich dargestellte Greifkran bewegt sich entlang der x- und y-Achse und greift bei Jump:

using UnityEngine;
using UnityEngine.InputSystem;

public class ClawCrane : MonoBehaviour
{
    public float speed = 3f;

    private InputAction moveAction;
    private InputAction jumpAction;

    void Start()
    {
        moveAction = InputSystem.actions.FindAction("Move");
        jumpAction = InputSystem.actions.FindAction("Jump");
    }

    void Update()
    {
        Vector2 input = moveAction.ReadValue<Vector2>();
        transform.position += new Vector3(input.x, input.y, 0f) * speed * Time.deltaTime;

        if (jumpAction.WasPressedThisFrame())
            Debug.Log("Grab!");
    }
}

Die Aktionen werden einmal in Start ermittelt und in InputAction-Feldern gespeichert. Move liefert einen Vector2: x steht für rechts und links, y für oben und unten auf den Tasten, und der Vektor wird normalisiert. Wenn du also gleichzeitig W und D drückst, erhältst du (0.71, 0.71) statt (1, 1). Da der Kran seitlich dargestellt wird, verwendet er y für die Höhe; bei einer Draufsicht würde y für z verwendet. Tastenaktionen liefern Abfragen wie bei Tasten: WasPressedThisFrame(), WasReleasedThisFrame() und IsPressed(). Zwei Fehler können auftreten: Bei einem falsch geschriebenen Namen gibt FindAction null zurück (beim ersten Lesezugriff tritt eine NullReferenceException auf), und ReadValue<Vector3>() für Move löst eine InvalidOperationException aus, sobald eine Taste gedrückt wird, weil Move einen Vector2 enthält.

challenge icon

Aufgabe

Mittel

Der Vermesser kartiert ein Schneefeld aus der Vogelperspektive und trägt flags (3) bei sich, die er unterwegs aufstellt. Das Skript hat speed (4), flags, flagPrefab und eine Liste planted. Verwende die Aktionen des Projekts:

  • Move bewegt den Vermesser mit speed Einheiten pro Sekunde über den Schnee: nach rechts und links entlang der x-Achse, nach oben und unten entlang der z-Achse.
  • Bei jedem Drücken von Jump wird eine Flagge aufgestellt: eine Kopie von flagPrefab an der x- und z-Position des Vermessers und bei y 0.75, die zu planted hinzugefügt wird. Dabei wird eine von flags verbraucht und protokolliert, wie viele übrig sind, zum Beispiel Flags left: 2. Sind keine Flaggen mehr übrig, stellt Jump keine Flagge auf.
  • Bei jedem Drücken von Attack (ein Linksklick) wird die zuletzt aufgestellte Flagge wieder herausgezogen: Sie wird zerstört und aus der Liste entfernt, flags wird um eins erhöht und dieselbe Zeile wird protokolliert.

Drücke Play, stelle drei Flaggen auf und ziehe eine wieder heraus, dann drücke Check.

Probier es selbst

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.InputSystem;

public class Surveyor : MonoBehaviour
{
    public float speed = 4f;
    public int flags = 3;
    public GameObject flagPrefab;

    private List<GameObject> planted = new List<GameObject>();

    void Start()
    {
        // Finde die Aktionen Move, Jump und Attack
    }

    void Update()
    {
        // Bewege dich mit Move, setze mit Jump eine Flagge und ziehe mit Attack eine heraus
    }
}
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