Skip to content

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.


Assets/FOS/LockDoorSystem/
└── Standard/ ← you are here

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


  1. Drop FOS Essentials > FOS Lock Door System > Standard > Lock Door System into your scene.
  2. 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.
  3. 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.
  4. 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.
  5. 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.


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

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

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.


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.


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.


French Oasis Studio SAS — contact@frenchoasis.studio