Skip to main content
VRse Builder offers multiplayer capability out of the box for every story built on it, this is true as of v0.5.1. We use Photon Fusion 2 as the multiplayer provider, so you must make sure you have a Photon account and a Fusion 2 server setup on your dashboard. Next you must make sure the Photon configuration is done correctly, verify the same from Project Setup

Setup

  1. Open the Menu Scene in your project
  2. Configure the Platform GameObject:
    • Change the Login Method to “Domain Name”
    • Add the base URL for the Pulse dashboard
    • Ensure Pulse login is enabled
    • This enables InVR Login functionality and sends analytics to the respective dashboard

RoomManager Configuration

  1. Open the RoomManager
  2. Run “Update Build Settings” and “Update Project Settings”
    • This adds the necessary scenes to the build settings
    • Fills data in ProjectSettings from RoomManagerConfig
  3. Configure each multiplayer module:
    • Set PlayMode to “Both” (enables both Singleplayer and Multiplayer)
    • Set the Max Players Count according to your requirements (typically 2-8)

Developer Scene - Experience Panel Setup

  1. Set the Experience Panel mode to “Multiplayer”
  2. Click “UpdatePanelInEditor” to apply changes
  3. In LevelBuilder, uncheck the “AutoStartStory” boolean
    • This prevents automatic story start in multiplayer mode

Networked Components

Make sure the following components are properly configured:
  • NetworkManager - handles connection and session management
  • NetworkAuthorityManager - manages permissions and admin roles
  • NetworkStatusDisplayer - shows connection status to players (present in the Menu Scene, not Dev Scene)

Networked Interactables

For all interactable objects that should synchronize across clients:
  1. Ensure they have the appropriate network components:
    • GainAuthorityOnGrab - for grabbable objects
    • GainAuthorityOnPlace - for place points
    • GainAuthorityOnTouch - for touchable objects
  2. Verify that all event-driven actions properly invoke network events

User Flow

Region Selection

  1. Players can select the network region before creating or joining a session
  2. Available regions are displayed with ping times
  3. Select the region with the lowest ping for best performance
  4. The region affects all players who join the session

Session Creation (Host/Admin)

  1. Start application and navigate to multiplayer selection screen
  2. Select “Create Session” option
  3. Choose the desired module/experience
  4. Session is created with a unique room code
  5. The first player to create the session automatically becomes the admin

Session Joining (Participants)

  1. Start application and navigate to multiplayer selection screen
  2. Either:
    • Select from available sessions in the list, OR
    • Enter the room code provided by the host
  3. Join the session

Session Management

  1. Admin Controls:
    • Only the admin can start the story
    • Admin can see the “Start Story” button in the UI
    • Once the story is started, no new participants can join
    • Admin has additional control options for the session
  2. In-Session Features:
    • Mute/Unmute: Toggle voice chat for yourself (accessible via Experience Panel)
    • Deafen: Disable all incoming voice chat
    • Leave Session: Return to lobby

Role Selection

VRse Builder’s multiplayer system supports role-based experiences where players can be assigned specific roles that determine their interactions and responsibilities within the virtual experience Role Selection allows you to:
  • Define specific roles for players within a multiplayer session
  • Restrict certain triggers and actions to specific roles
  • Create structured experiences with designated responsibilities
  • Support both role-based gameplay and observer modes

Setup

RoomManager Configuration
  1. Open the RoomManager in your project
  2. Configure Multiplayer Experience:
    • Set PlayMode to “Both” or “MultiplayerOnly”
    • The NetworkPlayerConfig section becomes visible when multiplayer is enabled
  3. Role Selection Mode:
    • Set to “None” for unrestricted gameplay
    • Set to “Fixed” for role-based experiences

Role Selection Modes

None Mode
  • No roles are assigned to players
  • Any player can trigger any event freely
  • Standard multiplayer experience without restrictions
Fixed Mode
  • The number of roles defines the number of required players
  • Each role can be selected by only one player
  • MaxPlayers can be greater than the number of roles to allow observers
  • Story cannot start until all required roles are assigned

Roles & Subsets Configuration

Roles
  • Create a list of individual roles with unique names
  • These roles are selectable by players during session setup
  • Examples: “Instructor”, “Student”, “Observer”, “Technician”
Subsets
  • Group roles into logical collections
  • Each subset has a unique index (starting from 1)
  • Subsets are used in story triggers to define which roles can perform specific actions
  • Example: Subset 1 might contain [“Instructor”, “Technician”] for administrative actions

Development Scene Setup

  1. Add Role Selection UI:
    • Add the ROLE SELECTION UI prefab to your development scene
    • Position it near the ExperiencePanel or player spawn point
  2. Configure NetworkRoleSelectionManager:
    • In the NetworkRoleSelectionManager component
    • Assign the StartStoryButton from the ExperiencePanel
    • This enables automatic button control based on role assignment status
Using Role Restrictions in Triggers To apply role-based restrictions on any trigger node:
  1. Add the targetRoleSetId parameter to the trigger’s data field
  2. Example JSON configuration:
{
  "Name": "GrabbableTrigger",
  "Query": "LabEquipment",
  "Option": "Grab",
  "Data": "{\"targetRoleSetId\": 1}",
  "Type": 1
}
Role Set ID Values
  • 0 (default): No restriction - any player can perform the trigger
  • 1+: Restricts the trigger to roles that belong to the subset with that index
If targetRoleSetId is not specified in a trigger node, it defaults to 0, allowing all players to activate the trigger. Role Selection Process
  1. Session Creation: Admin creates a multiplayer session with role selection enabled
  2. Player Joining: Players join the session and see the role selection interface
  3. Role Assignment: Each player selects their desired role (if available)
  4. Story Start: Once all required roles are assigned, the admin can start the story
  5. Restricted Interactions: During gameplay, only players with appropriate roles can trigger restricted actions
Role Management
  • Role Conflicts: If a player tries to select an already-taken role, they’ll be prompted to choose another
  • Observer Mode: Players can join as observers if MaxPlayers exceeds the number of required roles
  • Mid-Session Changes: Role assignments are locked once the story begins
Example Configuration
{
  "roles": [
    "Instructor",
    "Student",
    "Observer",
    "Safety Officer"
  ],
  "subsets": [
    {
      "index": 1,
      "roles": ["Instructor", "Safety Officer"]
    },
    {
      "index": 2,
      "roles": ["Student"]
    }
  ]
}
In this example:
  • Subset 1 (administrative): Instructors and Safety Officers can perform management actions
  • Subset 2 (learning): Students can perform learning-specific interactions
  • Observers have no special restrictions and follow default permissions

Voice Chat System

Setup

  1. Voice chat is automatically enabled in multiplayer sessions
  2. Voice chat uses Photon Voice, configured with the Voice App ID

Controls

  1. Mute Microphone:
    • Prevents your voice from being transmitted to others
    • Access via the Experience Panel
  2. Deafen:
    • Disables incoming audio from all other players
    • Useful for focusing or when in noisy environments
    • Can be toggled independently from microphone mute

Troubleshooting

Basic Tests

  1. Create a test build of your multiplayer scene
  2. Test session creation and joining
  3. Verify that all participants can see each other
  4. Test interactions between participants
  5. Verify story progression synchronizes properly

Network Diagnostics

  1. Use the Network Status Display to monitor:
    • NetworkRunner status (connected, disconnected, shutdown)
    • Basic connection status
    • Server region
  2. The NetworkStatusDisplayer primarily shows connection and disconnection events, not detailed metrics

Known Issues

Story Desync Symptoms:
  • Story events do not trigger for all players.
  • Players experience different progression points.
  • Some players may be stuck while others advance.
Possible Causes:
  • Rapid actions by multiple players.
  • Network lag during critical story events.
  • Inconsistent authority resolution.
Solutions:
  • System attempts minor auto-resyncs.
  • Encourage players to wait briefly between actions.
  • For severe cases, restart the session.
  • Ensure all players have stable network connections.
Objects Desync Symptoms:
  • Objects appear in different locations for each player.
  • Object interactions (grab/place/touch) fail to sync.
  • Unexpected behavior from networked items.
Possible Causes:
  • Packet loss or latency spikes.
  • Conflicting authority over objects.
  • Improper network component setup.
Solutions:
  • Use GainAuthority components appropriately.
  • Check for consistent networked object setup.
  • Restart session if desync persists.
  • Improve local network reliability.
Player Desync Symptoms:
  • One or more players don’t see updates from others.
  • Voice, movement, or state not reflected correctly.
  • Player appears “frozen” or unresponsive to others.
Possible Causes:
  • Player disconnection or reconnection delay.
  • High ping or fluctuating internet quality.
  • No authority handoff on disconnect.
Solutions:
  • Players should use low-latency, stable internet.
  • Rejoining mid-session is not supported—restart needed.
  • Monitor network status with NetworkStatusDisplayer.
Voice Chat Issues
  1. No voice transmission:
    • Check microphone permissions
    • Verify microphone is not muted in-game or on device
    • Ensure proper region selection for lowest latency
  2. Echo or feedback:
    • Players should use headphones to prevent speaker output from feeding back into microphones
    • Adjust microphone sensitivity if necessary

Session Joining Problems

  1. Cannot find session:
    • Verify room code is entered correctly
    • Ensure both players are using the same region
    • Check that the session is not full or already in progress
  2. Disconnection during play:
    • The system will attempt to reconnect automatically
    • Player data is preserved for a short time to allow rejoining
    • If unable to reconnect, the player may need to rejoin from the main menu

Best Practices

  1. Design for Multiplayer: Consider multiplayer interactions from the start
  2. Authority Management: Clearly define which objects can be controlled by which players
  3. Feedback: Provide clear visual feedback for network status and session state
  4. Voice Communication: Encourage the use of voice chat for coordination
  5. Region Selection: Select the region with the lowest ping for all participants
  6. Player Count: Optimize for the expected number of players
  7. Testing: Test frequently with multiple devices under various network conditions