Wie Erweiterungen funktionieren
Eine Erweiterung fordert von vrOS genau das an, was sie braucht — Audioausgabe, eigene Panels, Netzwerkzugriff — und du gewährst oder verweigerst jedes Einzelne. vrOS startet sie, überwacht sie und startet sie neu, wenn sie abstürzt.
Eine Erweiterung von Dritten ist ein eigenes Programm: Sie läuft für sich, spricht über einen lokalen Socket mit vrOS und kann vrOS bei einem Absturz nicht mitreißen. Die fünf Erweiterungen, die mit vrOS ausgeliefert werden, sind stattdessen eingebaut — überwachte Tasks innerhalb der App, auf derselben API und mit derselben Disziplin, gegen eine Panic isoliert statt durch eine Prozessgrenze. Was die beiden Stufen unterscheidet, steht unter Eine Erweiterung entwickeln.
Diese Seite ist die Nutzerseite. Zum Selberbauen siehe Eine Erweiterung entwickeln.
Was mitgeliefert wird
Abschnitt betitelt „Was mitgeliefert wird“Alle fünf kommen mit 2.0.0 und starten ausgeschaltet. Schalte eine unter Einstellungen → Erweiterungen ein, und ihr Tab kommt ins Dash.
| Erweiterung | Was sie tut |
|---|---|
| VRChat OSC | Chatbox, Avatar-Parameter, Kamera, OSC-Tracker, OSCQuery-Erkennung. Funktioniert auch bei geschlossenem SteamVR. |
| Soundboard | Pads mit Kategorien, Gain, Loop und geteilten Pads, pro Pad auf dein Headset und/oder dein Mikrofon geroutet |
| OBS Control | Szenenwechsel, Stream- und Aufzeichnungsstatus und ein OBS-Director-Panel, für bis zu 16 OBS-Instanzen |
| Twitch | Anmeldung, Chat mit 7TV-Emotes, ein Werbe-Manager mit Werbe-HUD in VR und bis zu vier Live-Stream-Player |
| Steam Link Face | Bringt das Gesichtstracking einer Quest Pro, die über Steam Link streamt, ins Gesichtstracking von O·VR |
2.0.0 ist nicht der Gleichstand mit vrOS 1. Weitere Creator-Funktionen kommen als Erweiterungen zurück, eine nach der anderen, und in den Versionshinweisen steht, was in deinem Build gelandet ist.
Der Zustimmungsbildschirm
Abschnitt betitelt „Der Zustimmungsbildschirm“Eine Erweiterung fragt beim ersten Start, nicht bei der Installation. Bis du entscheidest, bleibt sie gestoppt. Sie läuft nicht und belegt keinen Slot auf der Leiste.
Der Bildschirm listet jede Capability auf, die sie anfordert, jeweils mit eigenem Schalter und einer Zeile in Klartext, was das in der Praxis bedeutet. Auch nicht angeforderte Capabilities stehen dort, als nicht angefordert markiert, damit du die ganze Form dessen siehst, was sie überhaupt je verlangen könnte. Dann: alles ablehnen oder Ausgewähltes zulassen.
Will eine spätere Version etwas Neues, wirst du nur zur Differenz erneut gefragt. Was du bereits gewährt hast, bleibt gewährt.
Was eine Capability abdeckt
Abschnitt betitelt „Was eine Capability abdeckt“| Capability | Was das Gewähren erlaubt |
|---|---|
| Bus | Die von ihr gelisteten vrOS-Ereignisse empfangen, etwa VR verbunden und VR getrennt. Ihre eigenen Ereignisse gehören immer ihr allein. |
| Overlays | Eigene Panels in deinem Bereich zeichnen. Andere Overlays kann sie weder sehen noch anfassen. |
| Capture | Ein Capture-Overlay eines bestimmten Fensters anfordern. |
| Audio | Über die vrOS-Audio-Engine und ihr Ausgangs-Routing abspielen. |
| Secrets | Ein Passwort oder Token unter eigenem Namen im Schlüsselspeicher deines Betriebssystems ablegen. |
| OSC | OSC-Sockets öffnen. |
| Network | Mit dem Netzwerk sprechen. |
| Videowiedergabe | Video und Audio aus dem Internet in ihren Panels abspielen. Audio kann weiterlaufen, während das Panel ausgeblendet ist. |
| Gesichtsdaten | Gesichts- und Eye-Tracking-Daten liefern oder lesen. |
Bus, Overlays, Capture, Audio und Secrets werden vom Host durchgesetzt: Fragt eine Erweiterung die vrOS-API nach etwas, das ihr nicht gewährt wurde, wird der Aufruf auf der Leitung abgewiesen.
First-Party-Erweiterungen
Abschnitt betitelt „First-Party-Erweiterungen“Die fünf eingebauten Erweiterungen werden mit vrOS ausgeliefert und sind ausgeschaltet, bis du sie unter Einstellungen → Erweiterungen einschaltest. Sie sind vorab gewährt, du wirst also nicht gefragt, wenn du eine zum ersten Mal aktivierst — außer bei Videowiedergabe und Gesichtsdaten, die nie vorab gewährt sind und immer darauf warten, dass du sie erlaubst. Ansonsten sind sie echte Erweiterungen: dasselbe Manifest, dieselben Capability-Chips, derselbe Knopf zum Widerrufen in den Einstellungen. Schalte eine aus, und sie stoppt.
Sie sind außerdem der Grund, warum die Erweiterungs-API ehrlich bleibt: Sie sind auf derselben API gebaut, die auch Dritte bekommen, ohne private Hintertür. Lässt sich eine First-Party-Funktion nicht auf dieser API bauen, ist die API falsch.
Einstellungen → Erweiterungen
Abschnitt betitelt „Einstellungen → Erweiterungen“Jede installierte Erweiterung steht dort mit Autor, Version und Capability-Chips: gewährt, angefragt (wartet noch auf deine Entscheidung) oder neutral, wenn die Erweiterung deaktiviert ist. Eine ausstehende Entscheidung kennzeichnet die Kategoriezeile und die Dash-Kopfzeile, damit sie von überall auffindbar ist.
Pro Zeile kannst du PRÜFEN — das öffnet den vollen Zustimmungsbildschirm —, die Erweiterung aktivieren oder deaktivieren und eine früher gewährte Capability widerrufen. Widerrufen ist derselbe Schalter, mit dem du sie gewährt hast. Siehe Einstellungen.
Der Slot auf der Leiste
Abschnitt betitelt „Der Slot auf der Leiste“Eine aktivierte Erweiterung mit Dash-Tab bekommt einen Slot auf der Leiste: zuerst die Kern-Tabs (Overlays, Leistung, Spielbereich), dann ein Trenner, dann die Erweiterungs-Slots in deiner Reihenfolge, mit den Einstellungen unten angeheftet. Kern-Tabs und Einstellungen bewegen sich nie.
Erweiterungen bekommen ihren Leisten-Tab standardmäßig auch in der Desktop-App. Siehe Die Desktop-App.
Diese Version zeichnet ein Platzhalter-Umrisssymbol neben das Kurzlabel der Erweiterung. Eigene Erweiterungssymbole sind nicht drin.
Eine Erweiterung kann zwei Arten von Panel zeichnen: einen Tab im Dash und ein Overlay-Panel, das du erzeugen und in deinem Bereich platzieren kannst. Overlay-Panels erzeugst du im eigenen Dash-Tab der Erweiterung.
Ein Overlay-Panel ist ein normales vrOS-Overlay. Verankere es an der Welt, an deinem Kopf oder an einem der beiden Handgelenke, greife es, sperre es — nach einem Neustart kommt es dorthin zurück, wo du es gelassen hast. Siehe Overlays.
Trennt sich VR, werden die Panels einer Erweiterung ausgeblendet, und die Erweiterung läuft weiter. Ihr Zustand wird nie abgebaut, weil du das Headset ablegst. Eine Erweiterung, die ohne VR laufen darf, erfährt nie, ob SteamVR überhaupt existiert.
Befehle und Belegungen
Abschnitt betitelt „Befehle und Belegungen“Erweiterungen registrieren benannte Befehle, die du aus ihren Panels und aus dem Dash auslösen kannst. Um einen davon mit einem Controller zu erreichen, weist du ihn in Einstellungen → Erweiterungen einer von acht vordeklarierten Aktionen zu und belegst diese Aktion dann in SteamVR unter Controller-Belegung, wie alles andere, was vrOS anbietet. Nicht zugewiesene Aktionen tun nichts. vrOS erfindet keine Gesten. Siehe Eingabe.
Eine Erweiterung von Dritten installieren
Abschnitt betitelt „Eine Erweiterung von Dritten installieren“Lege den Ordner der Erweiterung hier ab:
- Windows:
%LOCALAPPDATA%\vrOS\extensions\<id>\ - Linux:
~/.local/share/vros/extensions/<id>/
Ein vorhandener Ordner ist eine installierte Erweiterung. Sie wird als deaktiviert geführt, mit den angeforderten Capabilities als Chips, bis du sie aktivierst und den Zustimmungsbildschirm durchgehst. Signierte Verteilung über einen Store ist ein späterer Meilenstein; diese Version kennt lokale Ordnerinstallationen.
Wenn sich eine danebenbenimmt
Abschnitt betitelt „Wenn sich eine danebenbenimmt“Eine abgestürzte Erweiterung startet mit wachsender Wartezeit neu, nach der Vorgabe in ihrem eigenen Manifest. Ihre gespeicherten Daten liegen in vrOS, ein Neustart setzt also fort statt zurück.
Eine, die immer wieder abstürzt, wird nicht mehr neu gestartet und landet auf deaktiviert, mit dem Grund in der Ansicht. Eine Erweiterung, die gegen eine Protokollversion gebaut ist, die vrOS nicht mehr unterstützt, steht genauso da. Nichts verschwindet stillschweigend aus der Liste.
Um eine sofort zu stoppen, deaktiviere sie in den Einstellungen. Siehe Fehlerbehebung, wenn das Problem das überlebt.