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.
Aufgabe
MittelDer 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
speedEinheiten 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
flagPrefaban der x- und z-Position des Vermessers und bei y 0.75, die zuplantedhinzugefügt wird. Dabei wird eine vonflagsverbraucht und protokolliert, wie viele übrig sind, zum BeispielFlags 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,
flagswird 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
}
}
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
1Text auf dem Bildschirm
Canvas und TextPunktestand anzeigenZahlen formatierenEin Countdown-TimerRückblick: Tachometer4Szenen und Level
Eine Szene ladenDas Level neu startenNächstes LevelZwischen Szenen beibehaltenRückblick: Levelauswahl10Projekt: 3D-Plattformer
Der ParcoursBewegliche Plattformen2Buttons 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: Endlos-Runner
Drei SpurenHindernisse voraus9Das neue Eingabesystem
Zwei EingabesystemeTastatur und MausIn diesem Frame gedrücktEingabeaktionenRückblick: Eingabewechsel