Die Spielsteuerung ist ein fundamentaler Aspekt jeder Spielerfahrung. Ein reaktionsschnelles und intuitives Steuerungsschema kann ein Spiel aufwerten, während eine umständliche oder unzuverlässige Steuerung selbst das beste Spielkonzept ruinieren kann. Unity hat lange Zeit eine Standardeingabe-Methode angeboten, aber mit dem Aufkommen des neuen Input Systems hat sich die Art und Weise, wie wir Eingaben in Unity-Spielen verarbeiten, grundlegend verändert. Dieser Artikel ist ein umfassender Leitfaden, der Ihnen alles beibringt, was Sie über die Verwendung des Unity Input Systems wissen müssen, um Spielsteuerung der nächsten Generation zu entwickeln.
Warum das neue Input System?
Bevor wir uns ins Detail stürzen, wollen wir zunächst klären, warum Unity ein neues Eingabesystem überhaupt benötigt hat. Das alte System hatte seine Grenzen, insbesondere in Bezug auf Flexibilität, Geräteunterstützung und die Möglichkeit, komplexe Eingabeinteraktionen zu verarbeiten. Hier sind einige Hauptvorteile des neuen Systems:
- Geräteübergreifende Kompatibilität: Das neue System unterstützt eine breite Palette von Eingabegeräten, von Standard-Tastaturen und Mäusen über Gamepads und Touchscreens bis hin zu speziellen Geräten wie Lenkrädern und VR-Controllern.
- Einfachere Rebinds: Das System ermöglicht es Spielern, ihre Steuerung einfach neu zu belegen, ohne dass komplexer Code erforderlich ist.
- Abstrakte Eingabeaktionen: Anstatt direkt auf bestimmte Tasten oder Achsen zuzugreifen, definieren Sie abstrakte Aktionen, die dann auf verschiedene Eingabegeräte abgebildet werden können.
- Verbesserte Performance: Das neue System ist auf Leistung optimiert und kann große Mengen an Eingabedaten effizient verarbeiten.
- Event-basierte Eingabe: Statt ständig den Zustand einer Taste abzufragen, können Sie auf Eingabeereignisse reagieren, was zu saubererem und reaktionsschnellerem Code führt.
Installation und Einrichtung des Input Systems
Bevor Sie das neue Input System verwenden können, müssen Sie es in Ihr Unity-Projekt importieren. Gehen Sie dazu wie folgt vor:
- Öffnen Sie den Package Manager (Window > Package Manager).
- Suchen Sie nach „Input System” im Package Manager.
- Klicken Sie auf „Install”, um das Paket zu installieren.
- Starten Sie Unity neu, nachdem die Installation abgeschlossen ist. Möglicherweise werden Sie aufgefordert, das neue Eingabesystem zu aktivieren und das alte zu deaktivieren. Unity startet dann neu.
Nach dem Neustart ist das Input System aktiv und bereit zur Verwendung.
Grundlagen des Input Systems: Input Actions
Das Herzstück des neuen Input Systems sind Input Actions. Eine Input Action repräsentiert eine logische Aktion im Spiel, z. B. „Springen”, „Bewegen” oder „Schießen”. Anstatt direkt auf Tasten oder Achsen zuzugreifen, definieren Sie Aktionen und ordnen diesen Aktionen dann Eingabebindungen zu.
Erstellen eines Input Action Asset
- Klicken Sie mit der rechten Maustaste in Ihrem Projektfenster und wählen Sie „Create > Input Actions”.
- Benennen Sie das Asset, z.B. „PlayerInputActions”.
- Doppelklicken Sie auf das Asset, um den Input Action Editor zu öffnen.
Der Input Action Editor
Der Input Action Editor ist die zentrale Anlaufstelle für die Definition und Konfiguration Ihrer Eingabeaktionen. Er besteht aus drei Hauptbereichen:
- Action Maps: Action Maps gruppieren verwandte Aktionen. Sie könnten zum Beispiel eine Action Map für „Player Control”, eine für „UI Navigation” und eine für „Menu” haben.
- Actions: Hier definieren Sie die einzelnen Aktionen, z. B. „Move”, „Jump” oder „Fire”.
- Bindings: Hier definieren Sie, welche Eingaben (Tasten, Achsen, etc.) die jeweiligen Aktionen auslösen.
Erstellen einer Action Map und einer Action
- Klicken Sie auf das „+” Symbol neben „Action Maps”, um eine neue Action Map zu erstellen. Nennen Sie sie z.B. „Player”.
- Wählen Sie die „Player” Action Map aus.
- Klicken Sie auf das „+” Symbol neben „Actions”, um eine neue Action zu erstellen. Nennen Sie sie z.B. „Move”.
- Ändern Sie den Action Type auf „Value” und Control Type auf „Vector2”. Dies ist ideal für Bewegungssteuerung mit einem Joystick oder WASD.
Hinzufügen von Bindings
- Wählen Sie die „Move” Action aus.
- Klicken Sie auf das „+” Symbol neben „No Binding”. Wählen Sie „Add Up/Down/Left/Right Composite”.
- Konfigurieren Sie die einzelnen Bindungen:
- Up: Click „No Binding” and choose „Keyboard > W”
- Down: Click „No Binding” and choose „Keyboard > S”
- Left: Click „No Binding” and choose „Keyboard > A”
- Right: Click „No Binding” and choose „Keyboard > D”
- Fügen Sie ein weiteres Binding hinzu und wählen Sie „Add Joystick > Left Stick”.
Wiederholen Sie diese Schritte, um weitere Aktionen wie „Jump” (Button Action mit Binding auf die Leertaste) oder „Fire” (Button Action mit Binding auf die linke Maustaste) zu erstellen. Denken Sie daran, Ihre Änderungen zu speichern!
Verwenden der Input Actions im Code
Nachdem Sie Ihre Input Actions definiert haben, müssen Sie sie im Code verwenden, um auf die Eingaben des Spielers zu reagieren. Es gibt mehrere Möglichkeiten, dies zu tun:
Methode 1: Automatische Code-Generierung
Das Input System kann automatisch C#-Code für Ihre Input Actions generieren. Dies ist die einfachste und effizienteste Methode.
- Wählen Sie Ihr Input Action Asset im Projektfenster aus.
- Aktivieren Sie im Inspector die Option „Generate C# Class”.
- Passen Sie den Class Name und Namespace an, falls erforderlich.
- Klicken Sie auf „Apply”.
Dadurch wird eine C#-Klasse erstellt, die Sie in Ihrem Code verwenden können. Zum Beispiel:
„`csharp
using UnityEngine;
using UnityEngine.InputSystem;
public class PlayerController : MonoBehaviour
{
public PlayerInputActions playerControls;
private Vector2 moveDirection;
void Awake()
{
playerControls = new PlayerInputActions();
}
void OnEnable()
{
playerControls.Player.Enable();
playerControls.Player.Jump.performed += Jump; // Subscribe to the Jump action
}
void OnDisable()
{
playerControls.Player.Disable();
playerControls.Player.Jump.performed -= Jump; // Unsubscribe to prevent memory leaks
}
void Update()
{
moveDirection = playerControls.Player.Move.ReadValue();
// Verwenden Sie moveDirection, um den Spieler zu bewegen.
Debug.Log(„Move Direction: ” + moveDirection);
}
private void Jump(InputAction.CallbackContext context)
{
Debug.Log(„Jump!”);
// Implementiere die Sprunglogik
}
}
„`
Methode 2: Verwendung des Input System Events
Sie können auch Input System Events verwenden, die direkt auf GameObjects platziert werden. Fügen Sie die Komponente „Player Input” zu Ihrem Spieler-GameObject hinzu. Im Inspector können Sie dann Aktionen direkt an Funktionen in Ihren Skripten binden.
Methode 3: Direkter Zugriff auf Actions
Es ist auch möglich, direkt auf die Actions zuzugreifen, ohne die automatische Code-Generierung zu verwenden. Diese Methode ist etwas komplexer, bietet aber mehr Flexibilität.
Tipps und Tricks für die Verwendung des Input Systems
- Action-Maps für verschiedene Spielzustände: Verwenden Sie Action Maps, um die Steuerung je nach Spielzustand (z.B. im Menü, im Spiel, im Fahrzustand) zu ändern.
- Kontextbezogene Aktionen: Verwenden Sie die `performed`, `started` und `canceled` Callback-Funktionen, um auf verschiedene Phasen einer Eingabe zu reagieren.
- Geräteübergreifende Tests: Testen Sie Ihre Steuerung auf verschiedenen Geräten, um sicherzustellen, dass sie sich gut anfühlt und funktioniert.
- Rebind-Funktionen: Implementieren Sie eine Benutzeroberfläche, mit der die Spieler ihre Steuerung selbst neu belegen können.
Fazit
Das Unity Input System ist ein leistungsstarkes und flexibles Werkzeug, mit dem Sie moderne und intuitive Spielsteuerung erstellen können. Indem Sie die Grundlagen der Input Actions, Action Maps und Bindings verstehen, können Sie Ihre Spiele auf die nächste Stufe heben. Experimentieren Sie mit verschiedenen Konfigurationen, testen Sie auf verschiedenen Geräten und scheuen Sie sich nicht, die umfangreiche Dokumentation von Unity zu konsultieren. Viel Erfolg beim Erstellen großartiger Spielerlebnisse!