Mirror — Changelog
All notable changes to this pack are recorded here.
The format follows Keep a Changelog and the pack follows Semantic Versioning.
The version below must always match the one declared in Runtime/AssemblyInfo.cs — that
is the version the FOS Hub shows, and the one the Hub compares against the installed Core.
Nothing yet.
1.0.0 — 2026-08-20
Section titled “1.0.0 — 2026-08-20”First release. Requires FOS Essentials Core 1.0.0.
Core components
FOSMirrorManager— one per scene, owns the loop and arbitrates every mirror.FOSMirrorTarget— one per mirror, holds its settings and its on/off state, and does no per-frame work.FOSMirrorButtonandFOSMirrorInteract— manual controls, each able to toggle, force on or force off.
Switching
- Distance culling with squared distances, two-threshold hysteresis and round-robin checks, spread over a configurable per-frame budget.
- A mirror switched on is measured immediately instead of waiting for its turn.
- Free and Exclusive modes; exclusive is enforced at startup as well.
- Toggle scope per mirror: Local (no networking) or Synchronized (
[UdonSynced], manual sync, ownership taken before writing, state rebuilt for late joiners throughOnDeserialization). FOSTurnAllOff()on the manager as a panic button.
Appearance
- Mirror surface handling: hide the renderer, or swap it to an off material — a disabled mirror component otherwise leaves a pure black rectangle.
Materials/FOSMirrorOff.mat, a dark glossy pane, using Unity’s built-in Standard shader so the material never depends on assets outside Unity.- Extra components and extra colliders switched along with the mirror, in separate lists.
Quality
m_ReflectLayersandm_DisablePixelLightsexposed on the target, applied atStart.- Presets: Untouched (default, writes nothing), Players only, Players and world, World only, Nothing, Custom. The preset resolves into the layer mask field immediately, so the mask shown is the mask applied.
- Apply to the mirror now, to write the settings in the editor as well.
Editor tooling
- Scene scan: adds the components, wires mirror, manager and surface, fills the manager’s list. Re-runnable without overwriting manual settings; legacy non-SDK3 mirrors are counted and reported.
- Automatic
OnClickwiring for a UIButton, including detection of an existing wiring throughSerializedObject, argument included. - Indicative cost estimate, per mirror and per scene, weighted in the order that actually matters: reflected layers, then how many mirrors can render at once, then screen coverage.
- Orientation gizmo: mirror plane, arrow on the reflecting face, back face crossed out. The normal is read from the mesh.
- Warnings for the classic mistakes: untouched default layer mask,
UiMenuorPlayerLocalreflected, players reflected withoutMirrorReflection, several managers in the scene, a mirror missing from the manager’s list, several mirrors starting on in exclusive mode, and a toggle collider listed among the extra colliders. - Interface translated into English, French, Spanish and German.
Prefabs
FOSMirrorManagerandFOSMirrorExample.
- No
[CustomEditor(typeof(VRC_MirrorReflection))]is declared: Unity accepts only one per type and VRWorldToolkit already ships one. Both tools work side by side. - The reasoning behind each of these choices is in
README.md.
