Volltreffer: Wie das ereignisgesteuerte Eingabesystem von Unity die Steuerung in Backyard Baseball 2026 ermöglicht

Dies ist der zweite Beitrag in einer Reihe von Blogartikeln von Mega Cat Studios, in denen sie ihre Unity Expertise und Lösungen für reale Herausforderungen in der kommerziellen Spieleentwicklung vorstellen. In diesem Beitrag untersucht Matthew Wojtechko, wie man das ereignisgesteuerte Input System-Paket von Unity nutzen kann, um die Reaktionsfähigkeit zu verbessern und ineffiziente Abfragen zu reduzieren.
Lesen Sie den ersten Beitrag dieser Reihe: Skalierung von Unity -Workflows: Lehren aus mittelgroßen bis großen Projekten
Die Eingabe ist oft das Erste, was wir beim Start eines Spiels implementieren, und das aus gutem Grund: Wenn man weder eine Spielfigur bewegen noch durch ein Menü navigieren kann, ist alles andere unwichtig. Allerdings neigt der Code, der einfach nur zum Funktionieren gebracht werden soll, dazu, sich dauerhaft zu etablieren. Was mit ein paar einfachen Abfragezeilen beginnt, kann sich unbemerkt zu einer fragilen Codebasis entwickeln, die zusammenbricht, wenn reale Anforderungen wie frei belegbare Steuerelemente oder lokaler Mehrspielermodus hinzukommen.
Bei Mega Cat Studios haben wir uns von der ständigen Einzelbildprüfung (Polling) hin zu einem ereignisgesteuerten Workflow entwickelt. Ob wir die QTEs für die Jumpscare-Reaktionen in Five Nights at Freddy's: Hinein in die Grube oder lokaler Mehrspielermodus für Backyard Baseball 2026 , wobei das Input System-Paket von Unity genutzt wird, um ein reaktionsschnelles und wartungsfreundliches Gameplay zu gewährleisten.
Funktionen wie die folgenden werden schwer zu unterstützen, wenn sie bei der Programmierung der Eingabe nicht von Anfang an berücksichtigt werden:
- Mehrere Eingabegeräte (Tastatur, Controller, Touchscreen)
- Neu belegbare Bedienelemente
- Benutzeroberflächennavigation, die nicht mit der Spieleingabe kollidiert.
- Lokaler Mehrspielermodus
- Timing-sensitives Gameplay
In diesem Beitrag zeigen wir Ihnen, wie wir das Eingabesystem zur Lösung dieser Probleme einsetzen. Im Laufe des Gesprächs werden wir über Architektur sprechen – darüber, was es unseren Projekten ermöglicht, zu wachsen, und was dazu neigt, unter seinem eigenen Gewicht zusammenzubrechen.
Das Eingabesystem von Unity hat sich weiterentwickelt. Wir auch.
Als Unity im Jahr 2020 das neue Eingabesystem veröffentlichte, handelte es sich nicht nur um eine Überarbeitung der alten Funktionen Input.GetAxis und Input.GetButtonDown. Es handelt sich um einen grundlegend anderen Ansatz für die Eingabe, der ereignisgesteuert, geräteunabhängig und auf die Absicht des Spielers ausgerichtet ist. Folgende Kernkonzepte haben wir verinnerlicht.
Aktionen
Handlungen sind die Bausteine. In Backyard Baseball 2026 sieht das ungefähr so aus:
- Aktionskarten stellen Eingabekontexte dar.
- Gameplay
- Menüs
- Debug-/Entwicklertools
- Die Aktionen des Spielers spiegeln dessen Absicht wider:
- Swing
- Gleiten
- Basis stehlen
- Bestätigen
- Abbrechen
Unser Spielcode kommuniziert mit der Absicht, nicht mit den Geräten. Vielleicht drückt der Spieler die Leertaste. Oder vielleicht drücken sie die Kreuztaste auf einem PlayStation Controller. Unabhängig davon muss sich unser Spielercode nur dann darum kümmern, wann die „Swing“-Aktion ausgeführt wird. Diese Abstraktionsebene erleichtert uns das Leben.
Bindings
Bindungen sind die konkreten Zuordnungen von Geräten zu Aktionen, die es uns ermöglichen, mehrere Steuerungsschemata ohne zusätzliche Komplexität zu handhaben. Eine einzelne Aktion kann auf mehrere Eingaben von mehreren Geräten reagieren.
Auf diese Weise können wir Tastatur- und Maus-, Controller-, Touch- und Barrierefreiheitseinstellungen unterstützen, ohne unseren Code in Unübersichtlichkeit zu verzweigen. Aktionen können wir im Editor und zur Laufzeit problemlos neu verknüpfen. Wir werden dies in einem späteren Abschnitt genauer untersuchen.
Reaktionsfähigkeit
Die traditionelle Dateneingabe basiert auf Umfragen:
if (Input.GetButtonDown("Swing Bat"))
{
SwingBat();
}
Es ist simpel, aber es verknüpft die Eingangserkennung mit der Frame-Schleife. Wird die Eingabe schneller gedrückt und losgelassen als die Bildrate, wird sie möglicherweise nie erfasst.
Bei Spielen, die auf schnelle Reaktionen angewiesen sind, wie beispielsweise Kampf-, Rhythmus- und Präzisions-Plattformspiele, kann eine ungenaue Eingabe das Spielerlebnis ruinieren. Und selbst bei Spielen mit langsamem Spieltempo kann ein Fehler bei der Eingabe verheerende Folgen haben, wenn er in einem kritischen Moment passiert, wie zum Beispiel beim entscheidenden Schlag des Schlagmanns in Backyard Baseball 2026 .
Das Eingabesystem ist ereignisorientiert. Sie abonnieren das Programm einmalig, und Unity benachrichtigt Sie, sobald eine Eingabe erfolgt. Dadurch wird der CPU-Overhead reduziert, die Logik vereinfacht und fehlende Eingaben werden irrelevant. Von Tastendrücken und -loslassen bis hin zu Achsenwertänderungen wird alles in eine Warteschlange gestellt, sodass keine Eingaben verloren gehen. Selbst bei variablen Bildraten oder Geschwindigkeiten unterhalb der Bildrate werden diese Ereignisse der Reihe nach verarbeitet und zuverlässig an Ihre Rückruffunktionen übermittelt.
Das Ergebnis? Ein Input, der tausendfach überzeugt.
Lokaler Multiplayer
Der lokale Mehrspielermodus ist ein Bereich, in dem das Eingabesystem einen großen Vorteil gegenüber dem alten Eingabemanager bietet.
Mit der PlayerInput-Komponente und den Steuerungsschemata:
- Jeder Spieler erhält seine eigene Aktionsinstanz.
- Geräte können dynamisch gekoppelt werden.
- Split-Keyboard, mehrere Controller oder Hybrid-Setups „funktionieren einfach“.
Wichtig ist, dass die Spielersteuerung absichtlich isoliert ist. Keine Geräteindizierung oder Eingabekonflikte mehr zwischen Spielern. Dies war ein großer Vorteil für das Mega Cat-Team, als wir den Couch-Koop-Modus in Backyard Baseball 2026 implementierten.
Wenn lokaler Mehrspielermodus für Ihr Projekt überhaupt in Frage kommt, kann Ihnen die Verwendung des Input System-Pakets später viel Nacharbeit ersparen.

Manchmal verwenden Entwickler weiterhin Polling, selbst wenn sie das Eingabesystem nutzen. Es hat einen gewissen Reiz, einfach Keyboard.current.spaceKey.isPressed einzugeben, ohne sich um weitere Einstellungen kümmern zu müssen. Für bestimmte Projekte mag das in Ordnung sein, aber denken Sie daran: Wenn Sie langfristig planen, ist das Abonnieren von Input-Action-Callbacks der bessere Ansatz.
Struktur für Maßstab

Das Lesen der Eingabe ist einfach. Die eigentliche Herausforderung besteht darin, eine Architektur zu schaffen, die Eingaben in verschiedene Menüs, Spielmodi und Spielsysteme integriert.
Hier sind die Muster, die wir in mehreren veröffentlichten Spielen verwendet haben:
- Separate Eingabekontexte : Die meisten Projekte profitieren zumindest von Folgendem:
- Spielablaufkarte – Spielerbewegung, Kampf, Interaktionen
- UI-Übersicht – Navigation, Bestätigen/Abbrechen, Scrollen
- Debug-Map – Entwickler-spezifische Tastenkombinationen wie Konsolenumschaltung oder Zeitskalierung
Warum ist das wichtig? Um Eingangslecks zu vermeiden. Wenn man Kontexte nicht trennt, ist es viel schwieriger, Sonderfälle zu vermeiden, in denen beispielsweise das Drücken der Leertaste sowohl ein Menü bestätigt als auch den Spieler springen lässt. Mit Aktionskarten können wir ganze Eingabekontexte explizit aktivieren und deaktivieren, wenn sich der Spielzustand ändert. Dadurch wird das Problem von Eingabelecks praktisch irrelevant.
- Zentraler Eingabemanager : Während das Eingabesystem InputActionReferences pro Objekt unterstützt, profitiert ein großes Projekt von einem einzigen, maßgeblichen Eingabemanager. Ein guter Input-Manager typischerweise:
- Aktiviert und deaktiviert Aktionskarten
- Abonniert Eingabe-Callbacks
- Verarbeitet Geräteänderungen
- Fungiert als Schnittstelle zwischen Eingabe- und Spiellogik.
Hier ein einfaches Beispiel:
public class GameInputManager : MonoBehaviour
{
public PlayerInput playerInput;
public PlayerController player;
private void OnEnable()
{
playerInput.actions["Jump"].performed += OnJump;
playerInput.actions["Shoot"].performed += OnShoot;
}
private void OnDisable()
{
playerInput.actions["Jump"].performed -= OnJump;
playerInput.actions["Shoot"].performed -= OnShoot;
}
private void OnJump(InputAction.CallbackContext context)
{
Player.Jump();
}
private void OnShoot(InputAction.CallbackContext context)
{
Player.Shoot();
}
}
In vielen unserer Codebasen haben wir eine benutzerdefinierte Klasse für die Spieleingabe, die Funktionen enthält, mit denen Sie Rückruffunktionen registrieren und deregistrieren können, indem Sie lediglich einen String-Schlüssel angeben. Wir fügen außerdem ein Prioritätssystem hinzu, das es uns ermöglicht, in bestimmten Szenarien, wie den oben genannten Eingabekontexten, das Abhören bestimmter Eingaben zu stoppen. Die Verwendung dieses Managers zum Anbinden der Spielereingaben sieht folgendermaßen aus:
InputManager.Register(“Swing”, Priority.Character, SwingBat);
Die durch Eingaben gesteuerten GameObjects sind von der Eingabelogik, die sie steuert, entkoppelt. Das macht spätere Refactoring-Maßnahmen kostengünstiger und vereinfacht gleichzeitig den Code für die Entwickler, die damit arbeiten.
Umarme die Wiederbindung
Frei belegbare Bedienelemente sind kein Luxusmerkmal mehr. Sie werden im Hinblick auf Barrierefreiheit, Gerätevielfalt und grundlegende Benutzerfreundlichkeit erwartet.
Viele von uns bei Mega Cat Studios haben die Tastenbelegung mit dem alten Eingabemanager neu implementiert, daher wissen wir, wie mühsam das früher war (und es ist möglicherweise der Grund für so manches graue Haar in unseren Schnurrhaaren). Zum Glück bietet uns das Input System-Paket diese Funktion fast kostenlos.
InputActionRebindingExtensions.PerformInteractiveRebinding() erledigt die Hauptarbeit; wir müssen es lediglich in den Spielcode einbinden. Üblicherweise verwenden wir dafür zwei Skripte, die die Zuständigkeiten zwischen Frontend und Backend aufteilen:
- RebindsManager
- Verarbeitet den aktuellen Vorgang, sodass jeweils nur eine Aktion neu gebunden wird.
- Rückruffunktionen während des Neubindens deaktivieren
- Enthält die Eingabeaktionsreferenz
- RebindActionUI
- Verarbeitet die Interaktion zum Starten und Beenden des Vorgangs
- Jedem UI-Panel ist eine Funktion beigefügt, die die Eingaben neu zuordnet.
„Anfangs hatten wir dafür keinen Manager, daher übernahm das UI-Skript allein sowohl die Interaktion als auch den Rebind-Vorgang“, sagt Sofia Nacional, eine Entwicklerin von Backyard Baseball 2026 . „Dies war nicht skalierbar und ermöglichte es, mehrere aktive Rebind-Operationen gleichzeitig durchzuführen.“
Eine ordnungsgemäße Organisation der Eingaben im Backend gibt den Spielern auch mehr Freiheit bei der Anpassung von Dingen im Frontend. Nehmen wir als Beispiel Eingabekontexte. Bei einem Baseballspiel erfolgen die Aktionen der Spieler in verschiedenen Phasen: Schlagen, Werfen, Fangen und Basislaufen. In unserem Spiel ist es einem Spieler erlaubt, die Taste sowohl mit „Schläger schwingen“ als auch mit „Base stehlen“ zu belegen, da diese beiden Aktionen nie im selben Szenario vorkommen. Eingabekontexte erleichtern es, die richtigen doppelten Bindungen zuzulassen und gleichzeitig die problematischen Bindungen zu verhindern, die dazu führen würden, dass mehrere Eingabeaktionen ausgelöst werden.
Eingabe ist ein System
Der größte Fehler, den Teams begehen, ist, die Eingabe als Implementierungsdetail und nicht als Kern des Spielsystems zu behandeln. Die Eingabe beeinflusst alles: das Spielgefühl, die Benutzerfreundlichkeit der Benutzeroberfläche und die langfristige Wartbarkeit. Wenn Sie einen Prototyp entwickeln oder etwas Kleines auf den Markt bringen, kommen Sie vielleicht damit durch, wenn Sie innerhalb Ihrer MonoBehaviours-Funktionen stichprobenartige Abfragen durchführen. Wenn Ihr Spiel aber skalierbar sein soll, brauchen Sie etwas Robustes.
Als Videospielentwickler arbeiten wir für den Spieler; es ist unsere Aufgabe, ihm die Werkzeuge an die Hand zu geben, damit er seine Aufgabe richtig erfüllen kann! Durch die Verwendung einer ereignisgesteuerten Architektur optimieren wir nicht nur den Code, sondern schützen unsere Spiele auch vor Fehlern, die die Kontrolle der Spieler beeinträchtigen, und bieten ihnen das bestmögliche Spielerlebnis.
