FOS Lock Door System — Standard
Version 2.0.1 · requires FOS Essentials Core 1.3.0 or later · also requires FOS Access 1.0.1, FOS Localization 1.0.1, FOS Teleport 1.0.1, FOS UI Culling 1.0.1
A door players lock behind them: who is inside, do-not-disturb, anonymous mode, a doorbell with a camera view, and passages reserved to whoever holds the key.
Requires FOS Essentials Core 1.3.0, FOS Access 1.0.0, FOS Localization 1.0.0, FOS Teleport 1.0.0 and FOS UI Culling 1.0.0 — all four free.
Coming from version 1.0? Read CHANGELOG.md first. This release shares no class name
with it, and a prefab you have modified does not carry over on its own.
Editions
Section titled “Editions”Assets/FOS/LockDoorSystem/└── Standard/ ← you are hereA Pro edition will sit next to this one, adding components beside the Standard ones and talking to them through their public API. It will never replace a component on the prefab, so upgrading will not cost you the wiring you already did.
- Drop FOS Essentials > FOS Lock Door System > Standard > Lock Door System into your scene.
- Resize Detection Zone to cover the room. Keep its Collider on Is Trigger, and never disable the object — a disabled behaviour stops running and the room would look empty for good. You can turn its Mesh Renderer off.
- Set the room name on the display. It overwrites what the texts hold in the scene, so edit it there rather than on the canvas.
- For a reserved room: add an Access List (from FOS Access) somewhere in the scene, fill it, and point the lock and the passages at it.
- Move the teleport points to suit the room.
One Access List serves every door in the world. Do not give each door its own — they would each download the same list.
Components
Section titled “Components”| Component | Role | Sync |
|---|---|---|
FOSDoorLock |
Decides: locked, do-not-disturb, anonymous | Manual |
FOSDoorOccupancy |
Holds who is in the room | Manual |
FOSDoorBell |
The “someone is at the door” episode | Events only |
FOSDoorDisplay |
Every text, icon and indicator | None |
FOSDoorPortal |
A passage, optionally reserved | None |
Only FOSDoorLock decides anything. Everything else reads it. That separation is what
lets you add a second panel, a remote indicator or your own behaviour without touching
the state: register with FOSRegister, expose a public parameterless method, and you are
notified on every change.
| Source | Event sent to those registered |
|---|---|
FOSDoorLock |
FOSApplyDoorState, and FOSApplyDoorDenied on a refusal |
FOSDoorOccupancy |
FOSApplyOccupancy |
FOSDoorBell |
FOSApplyBell |
Coming from the 1.0 settings
Section titled “Coming from the 1.0 settings”| 1.0 | 2.0 |
|---|---|
| VIP Room | Locked on start ticked and Unlock when empty unticked |
| Lock For All | Anyone can lock |
| Delay Seconds | Display seconds, on the doorbell |
| Anonym Length | gone — the mask is a text you choose, the same for everyone |
| Room Name | on the display |
VIPChecker |
FOSAccessList, from the FOS Access pack |
HideSystem |
FOS UI Culling |
TeleportLDS |
FOSDoorPortal, on FOS Teleport |
Translating the door
Section titled “Translating the door”The interface of the editor is already translated. The texts shown in your world are yours, and go in the FOS Localization table:
| Key | Holds |
|---|---|
lockdoor.ring.who |
The ringing message. Must contain the {player} token. |
lockdoor.list.empty |
Shown instead of the list when the room is empty. |
lockdoor.denied.notAllowed |
Shown to somebody without the key. |
lockdoor.denied.loading |
Shown while the access list has not arrived yet. |
Leave the locale manager empty and the fallback texts written in the display are used as they are. The pack works without FOS Localization wired — it just speaks one language.
How the network side works
Section titled “How the network side works”State travels only through synchronised variables. A click takes ownership, writes,
serialises, and applies locally; every other client receives OnDeserialization and
applies the same thing. Nothing is reconstructed from an event, so a player arriving late
gets the whole state without anything being replayed for them.
Requests go the other way: a client asks the owner, and the owner checks who is really calling before doing anything. Nobody can add, remove or ring on somebody else’s behalf.
The doorbell synchronises nothing at all. Ringing is an event, not a state.
What this is not
Section titled “What this is not”The anonymous mode is cosmetic. It hides names on the panel, identically for every player — but any client can already list everyone in the instance, so it keeps nothing secret from someone determined. It is a courtesy, not a protection.
Access is decided on the player’s own client, as everything in Udon is. A modified client can answer what it likes. This tidies a world; it does not guard it.
Both limits are real, and neither has a fix available in Udon. Design your world knowing them rather than around them.
Credits
Section titled “Credits”French Oasis Studio SAS — contact@frenchoasis.studio
