# Getting Started

Welcome to the MirrorVR Setup! It's a long process, but it's easy if you follow along!

{% hint style="warning" %}
Make sure you have removed your old networking system from the scene before you continue.\
See [photonvr-to-mirrorvr](https://codedimmersions.gitbook.io/mirrorvr/manual/guides/migration-guides/photonvr-to-mirrorvr "mention") or [flowvr-to-mirrorvr](https://codedimmersions.gitbook.io/mirrorvr/manual/guides/migration-guides/flowvr-to-mirrorvr "mention") for proper cleanup.
{% endhint %}

{% hint style="warning" %}
If you have any obfuscators, make sure the following namespaces are added to the skipped namespaces list:\
`Mirror`, `Mirror.VR`, `MetaVoiceChat`, `EpicTransport`, `Epic.OnlineServices`
{% endhint %}

### Dependencies

* **Newtonsoft.Json**
  * Make sure you have this installed. To install, go to `Window > (Package Management) > Package Manager`, then hit the `+` icon in the top left, then `Add package by name...`, then type in `com.unity.nuget.newtonsoft-json`, and hit `Add` or `Install`.
* **Unity Version**
  * The recommended Unity version for MirrorVR is Unity 6000.3, but you should be able to use this package with no issues if you are on Unity 6000.0.38f1+.
* **Universal Render Pipeline**
  * It is recommended to have URP installed before installing this package. It's not required, it's just a suggestion.

### Installation

{% stepper %}
{% step %}
First, download the latest version of [Mirror](https://github.com/MirrorNetworking/Mirror/releases/latest) and put it into your game. Mirror is the backbone of MirrorVR and is how players communicate with each other.

Then, after Mirror is installed in your project, install [EOSTransport](https://github.com/CodedImmersions/EOSTransport/releases/latest). This is the core bridge between Mirror and EOS.

Once both are installed, get the [latest MirrorVR package](https://github.com/MirrorVR/MirrorVR/releases/latest) and put it in your game.

{% endstep %}

{% step %}
Go to `Assets/MirrorVR` in your Unity Project. That is where the package is located. Now go inside the `Prefabs` folder, and drag the Network Manager prefab into your scene.

<figure><img src="https://80627626-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FK2KwYyJh17evaze4fZSU%2Fuploads%2FLeu68yASE8rcEkqV2JEq%2FScreenshot%202025-07-27%20152544.png?alt=media&#x26;token=3e674b58-6f19-447e-8255-c7f4bd64905c" alt=""><figcaption></figcaption></figure>

{% endstep %}

{% step %}
Now open the Network Manager object you just dragged into the scene.\
Assign the Player Transforms to their values. Skip API Keys and Encryption Key for now, we will cover those in a bit.

Go right to the Settings section. Configure it however you like. See [mirror-vr-manager](https://codedimmersions.gitbook.io/mirrorvr/manual/components/mirror-vr-manager "mention") for details.

<figure><img src="https://80627626-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FK2KwYyJh17evaze4fZSU%2Fuploads%2FmqqIfIFOaQ62eXYGhkpQ%2FScreenshot%202025-07-27%20153719.png?alt=media&#x26;token=6ea7e682-8c6a-4bcf-967d-7f08fab8c9d0" alt=""><figcaption></figcaption></figure>

{% endstep %}

{% step %}
Now, to set up Epic Online Services. If you are using Dedicated Server or PlayFab features, you still need to use Epic, as it provides a player management backend to improve your game.\
\
Head right over to the [Epic Games Developer Portal](https://dev.epicgames.com/portal), sign in, and create an organization if you don't have one already.

<figure><img src="https://80627626-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FK2KwYyJh17evaze4fZSU%2Fuploads%2F6WPmaHWCea0eNi0zRv3t%2FScreenshot%202025-07-29%20212551.png?alt=media&#x26;token=ff125fba-eff5-4e0b-84e8-e13269b9c17d" alt=""><figcaption></figcaption></figure>

{% endstep %}

{% step %}
Once you have made your organization, hit the `Create Product` button.\
Name your product. It should be your game name. Once done, hit the create button, then wait a bit.

<figure><img src="https://80627626-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FK2KwYyJh17evaze4fZSU%2Fuploads%2FtrVpaHcu1GYIrlO78iru%2Fimage.png?alt=media&#x26;token=895d0b33-3179-4434-bb88-5f62a6ca46ac" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
Once your product has been created and it's done loading, click on it. On the left-hand side of your screen, click on the `Product Settings` tab.

<figure><img src="https://80627626-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FK2KwYyJh17evaze4fZSU%2Fuploads%2F9yN5L6P3haXSV8SOwDyy%2Fimage.png?alt=media&#x26;token=bda0973b-6448-45b0-a4db-25e609ea11d2" alt=""><figcaption></figcaption></figure>

Now click on the `Clients` tab.

<figure><img src="https://80627626-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FK2KwYyJh17evaze4fZSU%2Fuploads%2Fm2qCnxEMjmRmQiI22toP%2Fimage.png?alt=media&#x26;token=78958d1d-008f-457d-926c-5ec985bf314c" alt=""><figcaption></figcaption></figure>

{% endstep %}

{% step %}
Scroll towards the bottom, where it says `Client policies`. Click the blue `Add new client policy` button.

<figure><img src="https://80627626-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FK2KwYyJh17evaze4fZSU%2Fuploads%2F43s38Kf5s0phHecQ4i9H%2Fimage.png?alt=media&#x26;token=fbbd5c88-f1b9-4699-b6f6-58a884a95580" alt=""><figcaption></figcaption></figure>

Name your policy whatever you want. Follow the video below to set up the client policy.

{% embed url="<https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FK2KwYyJh17evaze4fZSU%2Fuploads%2FVn53CvI33a2ROeQJGXk7%2FScreen%20Recording%202026-01-11%20162131.mp4?alt=media>" fullWidth="false" %}

At the bottom right of your screen, press the blue `Add new client policy` button.

{% endstep %}

{% step %}
Now scroll up a little to the `Clients` section. Click the `Add new client` button.

<figure><img src="https://80627626-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FK2KwYyJh17evaze4fZSU%2Fuploads%2FAi0iGM5lE4zL8FpJyEwu%2Fimage.png?alt=media&#x26;token=0075a2b6-185a-4cd2-8986-0f8f073ad097" alt=""><figcaption></figcaption></figure>

Client Name can be anything. On client policy, select the one we just created. We can skip IP allow list and redirect URL, as they aren't needed for our case.

<figure><img src="https://80627626-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FK2KwYyJh17evaze4fZSU%2Fuploads%2FgMUO0SIjAV78n6sj3Vp1%2Fimage.png?alt=media&#x26;token=4c63b122-cb50-4e58-9f11-2c296f473619" alt=""><figcaption></figcaption></figure>

On the bottom right of your screen, click the `Add new client` button.

{% endstep %}

{% step %}
Next, go to the `Epic Account Services` tab.

<figure><img src="https://80627626-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FK2KwYyJh17evaze4fZSU%2Fuploads%2FbabkBEWj0tMHTpAI2Y4E%2Fimage.png?alt=media&#x26;token=8fcd8f7c-067e-4150-9318-264b817fc064" alt=""><figcaption></figcaption></figure>

Hit the `Create Application` button.

<figure><img src="https://80627626-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FK2KwYyJh17evaze4fZSU%2Fuploads%2FOHeFB0w28RPJtEasSzaY%2Fimage.png?alt=media&#x26;token=97f45eec-143e-47c8-af9e-5c3013434a92" alt=""><figcaption></figcaption></figure>

{% endstep %}

{% step %}
We don't need to do anything in the `Brand Settings` tab, so go up to the top right of your screen, and select the `Permissions` tab.

<figure><img src="https://80627626-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FK2KwYyJh17evaze4fZSU%2Fuploads%2FAzAiH8nsJTSybq0bmfaH%2Fimage.png?alt=media&#x26;token=339a2c79-c0e2-42b6-927a-48c1c1593e97" alt=""><figcaption></figcaption></figure>

Enable all permissions.

<figure><img src="https://80627626-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FK2KwYyJh17evaze4fZSU%2Fuploads%2F61xTtiAhczY7A6oujaba%2Fimage.png?alt=media&#x26;token=cf4178bf-a6d9-401b-829f-534766c7fd79" alt=""><figcaption></figcaption></figure>

Hit `Save Changes` at the bottom right.

{% endstep %}

{% step %}
Head over to the `Linked Clients` tab.

<figure><img src="https://80627626-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FK2KwYyJh17evaze4fZSU%2Fuploads%2FSmCClpMW5vtIfHVp6rwW%2Fimage.png?alt=media&#x26;token=325d22c1-5e18-416d-a020-aa90681ad1a7" alt=""><figcaption></figcaption></figure>

Select the client we made, and then hit `Save Changes`.

<figure><img src="https://80627626-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FK2KwYyJh17evaze4fZSU%2Fuploads%2Fo8D8F00ygBG1eK7BOjgm%2Fimage.png?alt=media&#x26;token=d52f44c3-edb1-432e-9fdf-8b98865f3c97" alt=""><figcaption></figcaption></figure>

Now in the top left, hit the `Back to Epic Account Services` button.

{% endstep %}

{% step %}
Now go back to the `Product Settings` tab.

<figure><img src="https://80627626-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FK2KwYyJh17evaze4fZSU%2Fuploads%2FhpA29hYVF2kwQStZneLZ%2Fimage.png?alt=media&#x26;token=b3ba3e1d-d208-4b6a-970c-98f45a8bd05a" alt=""><figcaption></figcaption></figure>

Under `SDK Download & Credentials`, scroll to the bottom to get your API Keys.

{% hint style="danger" %}

<p align="center"><strong>DO NOT</strong> share these API Keys with <strong>ANYONE</strong>!</p>
{% endhint %}

<figure><img src="https://80627626-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FK2KwYyJh17evaze4fZSU%2Fuploads%2FzTg5UP4QuuqKuJIx7BZw%2Fimage.png?alt=media&#x26;token=332dbe4a-d01e-4229-910d-cd719f7d6447" alt=""><figcaption></figcaption></figure>

{% endstep %}

{% step %}
Now go back to MirrorVRManager and put these credentials in their fields.

<figure><img src="https://80627626-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FK2KwYyJh17evaze4fZSU%2Fuploads%2FUSPQGiDe2ZC3Mhz8kM1j%2Fimage.png?alt=media&#x26;token=2d1fe966-97da-4ef2-9ab8-5b2e04507a05" alt=""><figcaption></figcaption></figure>

While we are here, let's set the Encryption Key.

{% hint style="info" %}
The Encryption Key will be used to read and write to Title Storage (10 free GB per app) and Player Data Storage (400 MB or 1000 files per player). Make sure you store it somewhere safe so you can use it later.
{% endhint %}

Go to [this website](https://generate.plus/en/hex) to generate a 32-byte hexadecimal string we can use as the encryption key.\
Set the number in the lower left to 32, copy it, put it into the Encryption Key field in MirrorVRManager, and you're all set!

{% hint style="warning" %}
Make sure you save your Encryption Key in some Cloud Storage service in case you lose it, because once you set it, you cannot change it without breaking things.
{% endhint %}

<figure><img src="https://80627626-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FK2KwYyJh17evaze4fZSU%2Fuploads%2FGHXAB39K5JM6Z12Qopsq%2Fimage.png?alt=media&#x26;token=67062ff4-c20f-4f14-9b9d-ad058de71086" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
And the basic setup is done! See below for next steps.

#### <mark style="color:orange;">**If you are using Oculus or Steam, there's more setup to do.**</mark>

See [meta-quest-setup](https://codedimmersions.gitbook.io/mirrorvr/manual/getting-started/meta-quest-setup "mention") or [steam-setup](https://codedimmersions.gitbook.io/mirrorvr/manual/getting-started/steam-setup "mention") for details.
{% endstep %}
{% endstepper %}
