Bausteine · Brille · MIT

mana-godot-xr

Alles, was eine Brille braucht — Start, Hände, Greifen, Werfen, Körperanker. Der Teil, den sonst jedes VR-Spiel neu erfindet.

15
Projekte benutzen ihn
11
Module
5
Bilder
Mitnehmen

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.

Was es tut

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.

Ansehen

5 Bilder aus dem Katalog

  • Die Hand am Controller, offen. Aus Grundkörpern gebaut, kein Fremdmaterial.

    Die Hand am Controller, offen. Aus Grundkörpern gebaut, kein Fremdmaterial.

  • Halb geschlossen — `schliessen(0.5)`.

    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.

    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, offen.

  • Die linke Hand, geschlossen.

    Die linke Hand, geschlossen.

Inhalt

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.
Abnehmer

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
Herkunft

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.

Grundsätze

Was er verkörpert

  • Offenheit
    Code und Mittelverwendung öffentlich.
  • Datensouveränität
    Verwahrer statt Eigentümer.
  • Langlebigkeit
    Bewährte Stacks, gute Doku.
Stand

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.