Das derzeitige integrierte Input-System von Unity wurde entwickelt, bevor die vielen verschiedenen Plattformen innerhalb der Engine unterstützt wurden, die heute eingesetzt werden. Es ist also eine großer Aufwand die verschiedenen Eingabegeräte wie Tastatur, Maus, Controller, Touch Display, Lenkrad, VR Controller, usw. einheitlich in deine Anwendung zu integrieren.
Aus diesem Grund wurde ein neues Input-System entwickelt. Das Eingabesystem wurde von Grund auf mit Blick auf Benutzerfreundlichkeit, plattformübergreifende Konsistenz und Flexibilität entwickelt.
Der neue Arbeitsablauf des Eingabesystems basiert auf einer einfachen Schnittstelle, die für alle Plattformen funktioniert und leicht erweitert werden kann, um kundenspezifische oder zukünftige Geräte zu unterstützen. Du kannst Aktionen im Editor oder per Skript festlegen und diese dann konkret mit Eingabetasten verbinden.
Installation
Du kannst dir das neue Eingabesystem in deinem Unity Projekt über den Package-Manager aktivieren. Klicke dazu auf Window > Package Manager und suche dir aus der Liste das Input System. Selektiere den Install Button um die Installation zu starten.
WICHTIG: Nach der Installation empfehle ich dir Unity komplett zu schließen und neu zu starten, da es bei Tests zu Schwierigkeiten kam und du so einige Probleme vermeiden kannst.
Installation Unity Input System
Input Debug
Nachdem du Unity neugestartet hast, solltest du im nächsten Schritt den Input Manager testen. Öffne dazu unter Window > Analysis > Input Debug den speziell dafür entwickelten Debugger. Im Abschnitt Devices öffnest du mit deinem Doppelklick die Details des jeweiligen Eingabegeräts. Solltest du dein Zielgerät noch nicht in dieser Liste finden dann suche dir das Layout in der Kategorie Layouts > Abstract Devices und füge es mit einem Rechtsklick > Create Device from Layout hinzu.
Sobald du die Übersicht des Eingabegeräts geöffnet hast, kannst du eine beliebige Taste drücken und sie wird unten im Events-Bereich angezeigt.
Nur wenn du hier eine Anzeige erhältst, solltest du auch mit den nächsten Schritten fortfahren. Funktioniert es bei dir nicht, dann überprüfe nochmals deine Input Manager Erweiterung im Package Manger, starte Unity neu und verbinde dein Eingabegerät erneut.
Unity Input Debug
Input Actions
Damit du deine eigenen Actions für die Eingabe definieren kannst, musst du dir zuerst im Asset Ordner deines Projekts eine .inputactions Datei erstellen. Klicke dazu auf das + um ein neues Asset zu erstellen und wähle „Input Actions“. Gib der eben erstellten Datei einen sinnvollen Namen und öffne sie mit deinem Doppelklick.
Unity Input Actions
Action Map
Damit eine Aktion etwas bewirken kann, muss sie aktiviert werden. Dies kann entweder durch einzelnes Aktivieren von Aktionen oder durch Massenaktivierung über Action Maps geschehen. Beachte, dass Letzteres immer effizienter ist.
Erstelle dir eine neue Action Map über das „+“ in der Kategorie Action Maps, deiner geöffneten InputActions Datei. Gib ihr einen entsprechenden Namen beispielsweise Gameplay. Eine weitere Map könnte Menu heißen, für die Steuerung innerhalb der Menüs.
Unity Action Maps
Actions
Innerhalb der Action Map legst du dir jetzt deine Actions an, wie z.B. Move, Look oder Interact. Selektiere dazu in der Kategorie Actions das + Zeichen um eine neue Aktion anzulegen und vergib wieder einen sinnvollen Namen für die jeweilige Actions. Du kannst dir hier beliebig viele Actions erstellen und diese sind innerhalb deiner Action Map gespeichert.
Mehr Informationen zu den einzelnen Actions bekommst du über den Properties Abschnitt. In der Kategorie Action kannst du den Type festlegen. Selektiere deine Move Action und wähle Action Type: Value. Dadurch kannst du die Action als Vector2 anlegen. Vor allem Actionen wie Move oder Look sind in fast allen Fällen auf Basis von Vector2 da es eine positive und eine negative Richtung gibt. Dies ist ein wichtiger Unterschied zu normalen Button Inputs wie beispielsweise bei Interact.
Unity Actions
Binding
Die von dir erstellte Action innerhalb der Action Map muss noch gebinded (verknüpft) werden. Selektiere innerhalb der Action (z.B. Move) den Eintrag <No Binding>. Sollte dieser bei dir nicht vorhanden sein, kannst du ihn über das + > Add Binding bei der jeweiligen Action erstellen.
Durch das Selektieren des Binding Eintrags ändern sich die Properties auf der rechten Seite entsprechend. Du kannst jetzt einen Path für das Binding festlegen. Wähle das Drop-Down-Menü und such dir aus der Liste dein Endgerät. Durch das Festlegen der Actions als Vector2, werden dir auch nur Vector2 Bindings angezeigt.
Bei der Verwendung eines GamePads könntest du jetzt für Move den linken Joystick und für Look den rechten Joystick verwenden. Diese werden dir auch angezeigt. Wie sieht es aber mit dem Keyboard aus? Auf der Tastatur hast du ja in 99% der Fälle nur Button und kannst somit keine Vector2 Aktion auslösen.
Erstelle dir daher in deiner Action ein „2D Vector Composite“ um eine Sammlung aus Buttons zu einem Vector2 Input zu machen. Diese Sammlung kannst du beispielsweise WASD nennen. Somit erstellst du dir automatisch vier neue Binding Einträge mit Up, Down, Left und Right.
Unity Bindings
Selektiere die einzelnen Einträge und verknüpfe die Tasten mit dem Eintrag. Du kannst dies direkt über das Drop-Down-Menü tun oder über die Suche.
Tastatur verknüpfen
Für die Look Action kannst du die Maus verwenden. Selektiere das Binding innerhalb der Maus und wähle beim Path Mouse > Delta aus. Bei Interact kannst du die Taste „E“ auf der Tastatur zuweisen.
Bindings zuweisen
Asset speichern
Sobald du mit deinen Einstellungen fertig bist, klickst du auf den „Save Asset“ Button um deine Input Actions abzuspeichern. Du kannst die Einstellungen jederzeit wieder verändern. Öffne dazu mit einem Doppelklick deine inpuactions-Datei im Asset Ordner deines Projekts.
Player Input Component
Um deine Actions auch in einer Anwendung verwenden zu können, musst du dir zuerst einen neues GameObject anlegen. Erstelle dir ein Empty GameObject „Player“. Füge an den Player eine neue Component > Input > Player Input. Innerhalb dieser neuen Component musst du jetzt deine eigenen Actions verlinken, also die Datei aus dem Assets Ordner oder du klickst auf „Create Actions…“ um automatisch ein neue Datei zu erstellen.
Player Input Component
Events zuweisen
Deine Actions werden durch die Verknüpfung über die Component am Player geladen. Du musst aber jetzt noch festlegen, welche Events durch die Actions hervorgerufen werden sollen. Selektiere in den Einstellungen der Player Input Component bei Behavior die Auswahl „Invoke Unity Events“.
Testen
Um dies zu testen, wählst du eines der Events z.B. Move und verknüpfst es mit dem Player und dann mit der DebugLogAction aus dem PlayerInput Skript.
Invoke Unity Events
Starte dann deine Anwendung im Unity Editor über den Play Button und wirf einen Blick auf die Console, wenn du eine der zugewiesen Events ausführst. In unserem Beispiel die Tasten W-A-S-D oder die Taste E.
System Test Console
Die Console zeigt dir dann die einzelnen Actions an und du bekommst eine genau Angabe um welche Action, welches Input Gerät, welche Taste es geht. Mit dieser Rückmeldung kannst du dir also sicher sein, dass das von dir erstelle Mapping funktioniert.
Hinweis: Mit dem ultimativen Unity Cheat Sheet erhältst du einen detaillierten Überblick über Tipps & Tricks mit dem Umgang von Unity. Sichere dir jetzt das Cheat Sheet, um deine Anwendungen noch einfacher und effektiver erstellen zu können!
Automatische Generierung
Wie bereits erwähnt, ist es nicht notwendig, dass du dir immer dein eigenes ActionAsset anlegst. Der schnellst Weg ist die Erstellung eines Players mit einem Player Input und die Generierung des ActionAssets auf Basis des „Create Actions…“ Button. Dieser Button wird dir innerhalb der Player Input Component nur angezeigt, wenn der Eintrag „Actions“ auf None steht.
Create Default Action Set
Das Default ActionAsset bietet dir eine gute Grundlage und bringt bereits viele Actions für Keyboard, Mouse, Gamepad, Touch, Joystick und XR mit sich. Es empfiehlt sich also, auf diesen Einstellungen aufzubauen und diese dann später für andere Projekte zu exportieren.
Default Action Asset
Beispiele
Im Package Manager unter dem Input System Package findest du verschiedene Samples die du in dein Projekt importieren kannst. Nimm dir also die Zeit und schau dir zu den verschiedenen Themen die Beispiele an.