There are many ways to add mirrors in your world. For this guide, we are going to focus on a basic setup.
First, you'll want to make sure that you have VRChat's SDK installed. Without this, you will not have VRCMirror in your project.

Assuming you've already imported the SDK, we'll begin by setting up the interact button to turn on the mirror.

  1. Find the mirror prefab in your Assets folder. You can search for "VRCMirror" or browse to Assets>SRCSDK>Prefabs>VRCMirror. Drag it into your scene and position it.
  2. In the upper left of your Inspector, uncheck the tickbox. This disables the mirror so that it will be off by default, which is recommended for performance.
  • Disable Pixel Lights: Leaving this checked is more performant, but avatars may look different in the mirror and the world if the light by the mirror includes point or spot lights. It is suggested to not have realtime point or spot lights near a mirror if you have this checked.
  • Turn off Mirror Occlusion: if you have Occlusion culling, you may see objects appearing and disappearing in the mirror. Leave this checked to prevent this issue.
  • Reflect Layers: You can customize which layers are shown in the mirror. A suggested change is to click the drop-down menu and uncheck UI. This will turn off menus, and nameplates in your mirror. You can choose to deselect other layers as well, for performance or specific effects.

Next, we will set up an interact button to turn it on.

  1. At the top left corner of your hierarchy list, click create and select "3D Object/Cube".
    1-Button
  2. Select the cube in your scene, and click on "Add Component" in the inspector window.
    2-Button
  3. Search and select VRC_Trigger This will add the VRC_trigger script onto your object.
    3-Button
  4. Click on custom and change the function to "On Interact". (This means whenever you or a player interacts with this object, it will call a set action)
  5. For your action event, you'll want to use "SetGameObjectiveActive"
  6. For the receiver, add your VRCMirror, but first you'll want to check "Advanced mode" box. This is important.
  7. For your broadcast, the default is AlwaysBufferOne. You want to change this to Local. If you don't, when a player interacts with the object, they're going to turn on the mirror for everyone! We don't want that.
  8. Change the operation to "Toggle".
  9. You may want to have your mirror disabled at run time. To do this, click on VRCmirror in your hierarchy or scene, and at the top left of your inspector tab, deselect that checkbox.

That's it! you now have a toggle-able mirror in your world!
You don't have to use this setup just for mirrors either. You can place any game object in that slot, and whenever you interact with the cube, you will disable/enable whatever game object you placed into it.

Here are some tips to make your mirror more "polished":

  • If you want to have a "fake mirror" that looks convincing but doesn't cause lag until you turn it on, you can create a "fake mirror" material that is simply Standard shader with Metallic set to 1 and smoothness set to .9 for a hazy mirror, or 1 for a clear mirror. Add a quad just slightly behind your VRCMirror and put this material on it. Then go to the GameObject menu, select Light>Reflection Probe, place it in front of your mirror and click bake. Now your "fake mirror" will seem to reflect the Static objects in the room.
  • Instead of a default cube, try a sphere with the fake mirror material, or use a more interesting mesh for your button.
  • You can make the entire mirror itself the button. However, this often means that gestures in front of the mirror will turn it off, so make sure to make the interact range small.