FOS Access
Version 1.0.1 · benötigt FOS Essentials Core 1.0.0 oder neuer
Beantwortet eine einzige Frage — hat diese Person den Schlüssel? — und lässt alles in deiner Welt sie stellen. Benötigt FOS Essentials Core 1.0.0.
Komponenten
Abschnitt betitelt „Komponenten“| Komponente | Aufgabe |
|---|---|
FOSAccessList |
Hält die Quellen und die Antwort. Eine je Liste. |
FOSAccessGate |
Zeigt oder verbirgt Objekte je nach dieser Antwort. Eine je gefilterter Stelle. |
Menü: Add Component > FOS Essentials > Access > ...
Einrichtung
Abschnitt betitelt „Einrichtung“- Erstelle ein leeres GameObject und füge FOS Essentials > Access > Access List hinzu.
- Fülle mindestens eine Quelle (siehe unten).
- Richte alles, was die Antwort braucht, auf diese Komponente aus — ein
FOSAccessGate, eine Tür, dein eigenes Verhalten.
Mehrere unabhängige Listen — VIP, Team, Crew einer Veranstaltung — bedeuten mehrere
FOSAccessList-Komponenten, jede auf ihrem eigenen Objekt. Eine Liste ist ein Ding, keine
Kategorie innerhalb einer Komponente.
Die vier Quellen
Abschnitt betitelt „Die vier Quellen“Sie sind kumulativ: eine einzige, die Zugang gewährt, genügt.
| Quelle | Änderbar ohne neu zu veröffentlichen | Antwortet sofort |
|---|---|---|
| Liste im Inspektor | nein | ja |
| Entfernte Liste (URL) | ja | nein — es ist ein Download |
| VRChat-Produkt | ja | nein — sie kommt mit dem Kauf-Callback |
| Master der Instanz | — | ja |
Üblich ist die Kombination der ersten beiden: die zwei oder drei Vertrauenspersonen, die mit der Welt ausgeliefert werden, plus eine Liste, die du später ohne Unity bearbeitest.
Das Format der entfernten Liste
Abschnitt betitelt „Das Format der entfernten Liste“Ein Anzeigename pro Zeile. Leere Zeilen werden ignoriert, ebenso Zeilen, die mit #
beginnen — so kommentierst du die Datei:
# TeamFrankk Darko# Gäste der Januar-VeranstaltungSome PlayerDie #-Regel gilt nur für die entfernte Liste. Im Inspektor ist ein Name ein Name —
ein Anzeigename darf durchaus mit einer Raute beginnen.
Namen zwischen beiden verschieben
Abschnitt betitelt „Namen zwischen beiden verschieben“Der Inspektor bietet Import from a file und Export to a file, beide im obigen Format. Eine Inspektor-Liste lässt sich also unverändert exportieren und hosten, und eine bereits veröffentlichte Datei zurück ins Prefab holen. Ein Name pro Zeile ergibt eine einzige Spalte — deshalb gibt es hier kein CSV, es gäbe nichts zu trennen.
Das Laden, und warum ein „nein” nicht immer ein Nein ist
Abschnitt betitelt „Das Laden, und warum ein „nein” nicht immer ein Nein ist“Während eine entfernte Liste lädt, kann die Liste nicht ehrlich antworten.
FOSIsResolved() sagt dir, ob die Antwort endgültig ist:
- ein ja ist es immer — Quellen fügen nur Personen hinzu, keine kann zurücknehmen, was eine andere gewährt hat; wer in der Inspektor-Liste steht, bleibt drin;
- ein nein ist erst endgültig, wenn nichts mehr unterwegs ist.
Eine Oberfläche, die ablehnt, sollte beides unterscheiden. „Du stehst nicht auf der Liste” und „die Liste ist noch nicht angekommen” behebt man nicht gleich — und wer weder das eine noch das andere hört, schließt schlicht, dass die Schaltfläche kaputt ist.
Öffentliche API
Abschnitt betitelt „Öffentliche API“| Aufruf | Antwort |
|---|---|
FOSIsAllowed() |
Hat die lokale Person den Schlüssel? |
FOSIsResolved() |
Ist diese Antwort endgültig? |
FOSState() |
StateLoading, StateReady oder StateFailed |
FOSRegister(behaviour) |
Bei jeder Änderung der Antwort FOSApplyAccess erhalten |
Ein Verhalten, das sich registriert, muss ein öffentliches, parameterloses
FOSApplyAccess() bereitstellen.
Das Gate
Abschnitt betitelt „Das Gate“FOSAccessGate sitzt auf dem, was es filtert, statt es zentral aufzulisten: Die Regel
lebt dort, wo das Objekt lebt, du siehst sie beim Auswählen des Objekts, und sie folgt
ihm, wenn du es verschiebst.
Es rührt nie sein eigenes GameObject an. Das ist keine Nettigkeit — ein Udon-Verhalten auf einem deaktivierten Objekt läuft nicht mehr, es würde also nie die Antwort erhalten, die es wieder einschalten soll. Es bliebe dunkel bis zum Neustart der Welt, ohne Fehler und ohne Erklärung. Ohne ausdrückliche Ziele steuert es stattdessen seine direkten Kinder: Setze das Gate auf ein leeres Objekt und parke darunter, was gefiltert werden soll.
Was dies nicht ist
Abschnitt betitelt „Was dies nicht ist“Es räumt eine Welt auf. Es schützt sie nicht.
Die Antwort wird auf dem Client der Person selbst berechnet, ein veränderter Client kann also antworten, was er will, und eine über eine öffentliche URL ausgelieferte Liste ist für jeden lesbar. Udon bietet nichts Besseres — es gibt keine serverseitige Prüfung, auf die man sich berufen könnte.
Schreibe in eine Liste nichts außer Anzeigenamen, und lass dies nie über etwas entscheiden, dessen Erreichen durch eine entschlossene Person dich stören würde.
Credits
Abschnitt betitelt „Credits“French Oasis Studio SAS — contact@frenchoasis.studio
