Setup
Menu Scene Configuration
- Open the Menu Scene in your project
- 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
- Open the RoomManager
- Run “Update Build Settings” and “Update Project Settings”
- This adds the necessary scenes to the build settings
- Fills data in ProjectSettings from RoomManagerConfig
- 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
- Set the Experience Panel mode to “Multiplayer”
- Click “UpdatePanelInEditor” to apply changes
- 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:- Ensure they have the appropriate network components:
- GainAuthorityOnGrab - for grabbable objects
- GainAuthorityOnPlace - for place points
- GainAuthorityOnTouch - for touchable objects
- Verify that all event-driven actions properly invoke network events
User Flow
Region Selection
- Players can select the network region before creating or joining a session
- Available regions are displayed with ping times
- Select the region with the lowest ping for best performance
- The region affects all players who join the session
Session Creation (Host/Admin)
- Start application and navigate to multiplayer selection screen
- Select “Create Session” option
- Choose the desired module/experience
- Session is created with a unique room code
- The first player to create the session automatically becomes the admin
Session Joining (Participants)
- Start application and navigate to multiplayer selection screen
- Either:
- Select from available sessions in the list, OR
- Enter the room code provided by the host
- Join the session
Session Management
- 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
- 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- Open the RoomManager in your project
- Configure Multiplayer Experience:
- Set PlayMode to “Both” or “MultiplayerOnly”
- The
NetworkPlayerConfigsection becomes visible when multiplayer is enabled
- 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
- The number of roles defines the number of required players
- Each role can be selected by only one player
MaxPlayerscan 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”
- 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
- Add Role Selection UI:
- Add the
ROLE SELECTION UIprefab to your development scene - Position it near the
ExperiencePanelor player spawn point
- Add the
- Configure NetworkRoleSelectionManager:
- In the
NetworkRoleSelectionManagercomponent - Assign the
StartStoryButtonfrom theExperiencePanel - This enables automatic button control based on role assignment status
- In the
- Add the
targetRoleSetIdparameter to the trigger’s data field - Example JSON configuration:
- 0 (default): No restriction - any player can perform the trigger
- 1+: Restricts the trigger to roles that belong to the subset with that index
targetRoleSetId is not specified in a trigger node, it defaults to 0, allowing all players to activate the trigger.
Role Selection Process
- Session Creation: Admin creates a multiplayer session with role selection enabled
- Player Joining: Players join the session and see the role selection interface
- Role Assignment: Each player selects their desired role (if available)
- Story Start: Once all required roles are assigned, the admin can start the story
- Restricted Interactions: During gameplay, only players with appropriate roles can trigger restricted actions
- 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
- 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
- Voice chat is automatically enabled in multiplayer sessions
- Voice chat uses Photon Voice, configured with the Voice App ID
Controls
- Mute Microphone:
- Prevents your voice from being transmitted to others
- Access via the Experience Panel
- 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
- Create a test build of your multiplayer scene
- Test session creation and joining
- Verify that all participants can see each other
- Test interactions between participants
- Verify story progression synchronizes properly
Network Diagnostics
- Use the Network Status Display to monitor:
- NetworkRunner status (connected, disconnected, shutdown)
- Basic connection status
- Server region
- 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.
- Rapid actions by multiple players.
- Network lag during critical story events.
- Inconsistent authority resolution.
- 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 appear in different locations for each player.
- Object interactions (grab/place/touch) fail to sync.
- Unexpected behavior from networked items.
- Packet loss or latency spikes.
- Conflicting authority over objects.
- Improper network component setup.
- Use GainAuthority components appropriately.
- Check for consistent networked object setup.
- Restart session if desync persists.
- Improve local network reliability.
- One or more players don’t see updates from others.
- Voice, movement, or state not reflected correctly.
- Player appears “frozen” or unresponsive to others.
- Player disconnection or reconnection delay.
- High ping or fluctuating internet quality.
- No authority handoff on disconnect.
- Players should use low-latency, stable internet.
- Rejoining mid-session is not supported—restart needed.
- Monitor network status with NetworkStatusDisplayer.
- No voice transmission:
- Check microphone permissions
- Verify microphone is not muted in-game or on device
- Ensure proper region selection for lowest latency
- Echo or feedback:
- Players should use headphones to prevent speaker output from feeding back into microphones
- Adjust microphone sensitivity if necessary
Session Joining Problems
- 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
- 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
- Design for Multiplayer: Consider multiplayer interactions from the start
- Authority Management: Clearly define which objects can be controlled by which players
- Feedback: Provide clear visual feedback for network status and session state
- Voice Communication: Encourage the use of voice chat for coordination
- Region Selection: Select the region with the lowest ping for all participants
- Player Count: Optimize for the expected number of players
- Testing: Test frequently with multiple devices under various network conditions