mana-godot-xr
Alles, was eine Brille braucht — Start, Hände, Greifen, Werfen, Körperanker. Der Teil, den sonst jedes VR-Spiel neu erfindet.
Kopie mit Wächter
Kopiert statt verlinkt, damit das Projekt nach einem frischen Klon aufgeht. Ein Wächter im Prüflauf meldet, wenn die Kopie hinter der Quelle zurückbleibt.
./tools/kit-abgleich.sh holen
Landet unter kit_xr/ im Projekt.
Zehn Projekte des Hauses laufen auf der Meta Quest, und alle zehn starten über denselben Aufruf. Dieses Kit ist die Antwort auf eine einfache Beobachtung: die Fehler, die eine VR-App unbrauchbar machen, sind fast nie die interessanten. Es sind immer wieder dieselben vier oder fünf, und jedes Projekt hat sie einzeln gemacht.
Die Fallen, die grün durchlaufen
Das ist der eigentliche Wert des Bausteins — er trägt die Fallen, die nichts meldet:
use_xr im falschen Zweig. Steht es in einem if, das nicht
durchläuft, rendert die App auf der Quest gar nichts. Kein Fehler, kein
Log. Deshalb gibt es XrStart.starte() und nicht eine Zeile Anleitung in
einem README.
Zwei Wege, still flach zu laufen. Fehlt enable_meta_plugin, oder
heisst der Schlüssel xr_mode_index statt xr_mode, dann startet die App
sauber — als flaches Bild. Das Manifest beweist dabei gar nichts; nur
adb logcat zeigt es.
Fehlendes meta_xr_features/hand_tracking. Die App läuft richtig, nur
ohne Hände. Wer in dem Zustand eine Handmessung durchführt, misst zweimal
den Controller und bekommt eine schöne, falsche Tabelle.
Alle drei kosten dasselbe: einen Abend, ein Gerät und die Vermutung, es läge am eigenen Code.
Warum das Abwurftempo aus dem Gipfel kommt
wurf misst nicht das letzte Bild vor dem Loslassen. Eine Hand wird beim
Loslassen bereits langsamer, und wer dort misst, bekommt systematisch zu
wenig — der Ball fällt kurz vor das Ziel, und zwar immer. Gemessen wird
deshalb der Gipfel der Handbahn.
Der Anker, der eine Stichprobe von eins war
koerper_anker trägt eine Lehre im Namen: eine Höhe, die an einem Körper
passt, ist keine Höhe, sondern eine Stichprobe von eins. Holster und
Brusttasche sitzen deshalb auf Werten, die aus der gemessenen Kopfhöhe
der tragenden Person abgeleitet sind, nicht auf Zentimeterangaben aus
einem Entwurf.
5 Bilder aus dem Katalog
-
Die Hand am Controller, offen. Aus Grundkörpern gebaut, kein Fremdmaterial.
-
Halb geschlossen — `schliessen(0.5)`.
-
Ganz geschlossen. Genau diese drei Bilder müssen sich unterscheiden; in `taktspiegel` taten sie es einmal nicht, weil `baue()` die Drehung des Knotens überschreibt.
-
Die linke Hand, offen.
-
Die linke Hand, geschlossen.
Woraus er besteht
xr_start- OpenXR starten, Foveation, Anzeigetakt, Bildbudget. Der Einstiegspunkt jeder Brillen-App des Hauses.
hand- `hand_netz` (Hand am Controller) und `hand_bild` (Hand aus Gelenkdaten).
griff- Kneifen mit blossen Händen — mit Hysterese und einer Antwort auf Trackingverlust.
wurf- `WurfHand`: das Abwurftempo kommt aus dem Gipfel der Handbahn, nicht aus dem letzten Bild.
koerper_anker- Holster und Brusttasche, auf Höhen aus der gemessenen Kopfhöhe statt aus einer Annahme.
augenhoehe- Eine ruhende Arbeitshöhe, die nicht mit dem Kopf mitwackelt.
durchsicht- Passthrough stufenlos überblenden.
15 Projekte benutzen ihn
Gezählt, nicht behauptet: pnpm bausteine durchsucht jede
App im Baum nach Klassennamen des Bausteins und nach vendorierten
Kopien. Ein Baustein ohne Abnehmer wäre keiner, sondern eine
Bibliothek auf Vorrat. Stand: 2026-09-15.
- datenstadt
- flachstein
- flockstill
- gleisgarten
- handstart
- heftwand
- hornkehr
- kugelweg
- setzblei
- staubzug
- stubentiger
- taktspiegel
- tresenwurf
- tussle
- wurfbogen
Wem er gehört, was ihn prüft
- Lizenz
- MIT — Bausteine sind permissiv lizenziert, Anwendungen AGPL-3.0. Ein Baustein, der ansteckt, wäre keiner.
- Träger
- Der Verein
- Gebiet
- Brille — Was nur in VR anfällt: Start, Hände, Greifen, Werfen, Körperanker.
- Wache
-
kit_smoke.gd— prüft ihn headless. - Katalog
-
kit_katalog.gd— rendert seine Bauteile als Bilder.
🛑 Kein Link ins Repository: die Kit-Repos liegen auf der eigenen Forge und sind noch nicht öffentlich. Ein Link, der 404 antwortet, wäre schlechter als keiner.
Was er verkörpert
-
OffenheitCode und Mittelverwendung öffentlich.
-
DatensouveränitätVerwahrer statt Eigentümer.
-
LanglebigkeitBewährte Stacks, gute Doku.
Was offen ist
- Die Wache prüft, was ohne Gerät wahr sein muss. OpenXR, Passthrough, Handtracking und Kopfhöhe gibt es nur auf der Brille — dafür steht kein Test ein.
- Nur die Hand ist abgebildet. `xr_start`, `augenhoehe`, `durchsicht` und `koerper_anker` sind Verhalten über Zeit — davon zeigt ein Standbild nichts, und ein hübsches Bild dazu wäre eine Behauptung ohne Gegenstand. Ehrlich wären kurze Aufnahmen von der Brille; die sind nicht gemacht.
Ein Gebiet je Baustein
Die Trennung nach Fachgebiet ist der Grund, warum es fünf Repos sind und nicht eines.