A QUICK SUMMARY – FOR THE BUSY ONES
TABLE OF CONTENTS
Vor einiger Zeit bat uns unser Kunde aus der Spielebranche, Support für das zu implementieren Dampfdeck im Electron-basierten Game Launcher. Unser erster Artikel in der Steam Deck-Serie erklärt die Einzelheiten einer Steam Deck-Kompatibilitätsprüfung und die allgemeinen Anforderungen, die erfüllt werden mussten, um ein gewünschtes Ergebnis zu erhalten verifiziert
Status von Valve.
Bis auf ein paar kleinere Fehler funktionierte unsere Anwendung zunächst auf Steam Deck über den Touchscreen. Um jedoch die zu erfüllen Anforderungen, es musste auch die physische Steuerung von Steam Deck unterstützen, ohne dass eine externe Maus oder Tastatur erforderlich war und ohne dass der Benutzer irgendwelche Anwendungseinstellungen ändern musste.
Dieser Artikel konzentriert sich darauf, unsere Erfahrungen mit der Implementierung von Controller-Unterstützung zu teilen und Einblicke in die notwendigen Schritte für diesen Prozess zu geben.
Das navigator.getGamePads ()
Die Methode der Gamepad-API bietet einen detaillierten Einblick in den Zustand der verbundenen Gamecontroller (einschließlich des Steam Decks), insbesondere anhand der Eigenschaftenschaltflächen und Achsen in den einzelnen Controllern. Gamepad
Objekt. Der Status einer Taste wird durch die gedrückte Eigenschaft angezeigt (entweder wahr oder falsch) und der Gleitkommawert, der die Intensität des Tastendrucks darstellt. Die Werte im Achsenarray sind Gleitkommazahlen, die die Position entlang der Achse angeben. Andere Werte als 0 bedeuten, dass das Steuerelement gedrückt wurde und die entsprechenden Handler aufgerufen werden sollten.
Um das spezifische, gedrückte Steuerelement zu identifizieren, mussten wir den Status abbilden, der von navigator.getGamePads ()
Methode zum entsprechenden Gamepad. Ein für den Xbox One-Controller entwickeltes Mapping gewährleistet die Kompatibilität und Konsistenz mit den Steam Deck-Steuerelementen.
In der Anwendung sind nur bestimmte Komponenten so konzipiert, dass sie fokussierbar sind — insbesondere solche, die ausgelöst werden können, wie Buttons oder Dropdowns. Alle fokussierbaren Elemente mussten identifiziert werden, und die Handler für die unterstützten Steuerelemente wurden für jede fokussierbare Komponente definiert, um auf diese Trigger zu reagieren. Das heißt, wenn zum Beispiel eine Taste A auf dem Steam Deck gedrückt wird, wird eine entsprechende Aktion ausgeführt:
const gamepadButtonHandlers = {
[buttons.A]: { event: (elementRef) => elementRef.current.click() },
};
Da viele Komponenten dieselben Gamepad-Button-Handler verwendeten (zum Beispiel Taste B, die herkömmlicherweise verwendet wird, um nach oben zu navigieren oder zu einem übergeordneten Menü zurückzukehren), haben wir uns für den gemeinsamen Kontext entschieden.
const GamepadHandlersProvider = ({ children, gamepadButtonHandlers }) => {
const inheritedContext = useContext(GamepadHandlersContext) || {};
const newContext = useMemo(
() => ({
handlers: {
...inheritedContext?.handlers,
...gamepadButtonHandlers,
},
}),
[gamepadButtonHandlers, inheritedContext?.handlers],
);
return (
<GamepadHandlersContext.Provider value={newContext}>
{children}
</GamepadHandlersContext.Provider>
);
};
Gemäß den Steam-Deck-Anforderungen müssen bei Verwendung der physischen Steuerung von Steam Deck die Zeichen auf dem Bildschirm entweder mit den Namen der Steam Deck-Schaltflächen oder den Namen der Xbox 360/One-Tasten übereinstimmen. Um diese Anforderung zu erfüllen, haben wir eine Fußzeile hinzugefügt, die die Steuerelemente und die Statusänderungen enthält, die zu bestimmten Effekten führen, wenn ein bestimmtes Element fokussiert wird.
Bei der Implementierung der Unterstützung für das Steam Deck in unserer Anwendung verwendeten wir PS5-Controller, die an unsere Computer angeschlossen waren, um das Benutzererlebnis zu simulieren. Durch Drücken verschiedener Tasten auf dem Controller haben wir Aktionen wie das Navigieren durch Menüs, das Auswählen von Optionen und das Interagieren mit UI-Elementen repliziert, als ob wir direkt mit dem Steam-Deck interagieren würden. Obwohl die letzten Tests auf dem tatsächlichen Gerät mit dem speziellen Mapping stattfanden, fanden wir diesen Ansatz während der Entwicklung viel praktischer, als direkt auf dem Steam Deck zu arbeiten. Um die Benutzererfahrung bei der Verwendung der Controller zu verbessern, haben wir ein benutzerdefiniertes Tool entwickelt, mit dem der Status aller Steuerelemente auf dem Bildschirm angezeigt wird.
Um eine Steam Deck-Umgebung auf unseren PCs zu simulieren, musste die SteamOS-Umgebungsvariable beim Ausführen der Anwendung auf 1 gesetzt werden.
Die Implementierung der Controller-Unterstützung war sowohl herausfordernd als auch unglaublich interessant. Nichtsdestotrotz Es ist wichtig zu verstehen, dass sich dieser Artikel bewusst auf bestimmte Aspekte konzentriert, anstatt eine erschöpfende Untersuchung aller Nuancen der Controller-Integration zu bieten. Die Herausforderungen, mit denen wir konfrontiert waren, insbesondere die im Zusammenhang mit der Struktur unserer App, sind aufgrund der einzigartigen Einstellungen der verschiedenen Anwendungen möglicherweise nicht allgemein anwendbar. Angesichts des zunehmenden Interesses am Steam Deck könnten immer mehr Softwareentwickler auf die Notwendigkeit stoßen, Controller-Unterstützung in ihren Apps zu implementieren. Aus diesem Grund glauben wir, dass die in diesem Artikel geteilten Erkenntnisse einen wertvollen Ausgangspunkt für die nahtlose Integration von Controllern bieten können.
Unser Versprechen
Brainhub unterstützt jedes Jahr Gründer:innen, Tech-Leads und Entwickler:innen bei klugen Technologieentscheidungen – mit offen geteiltem Wissen aus der Praxis.
Authors
Popular this month