LogoLogo
⚠️ Outdated documentationGo to LatestHomeAPI
SDK 1.1
SDK 1.1
  • Welcome
  • Overview
    • What is coherence?
    • How does coherence work?
    • Rooms and Worlds
    • Features and Roadmap
    • Release Notes
    • Known issues and Troubleshooting
  • Learn
    • Beginner's guide to networking
    • Package samples
    • First Steps tutorial
      • 1. Basic syncing
        • 1.2. Animation parameters
        • 1.3. Sending commands
      • 2. Physics / Authority transfer
      • 3. Areas of interest
      • 4. Parenting entities
      • 5. Complex hierarchies
      • 6. Persistence
    • Campfire project
      • Game mechanics
      • Leveraging object pooling
      • Remote interactions: Chairs
      • Remote interactions: Trees
      • A unique object with complex state
      • Custom instantiation and destruction
      • Running a server-side NPC
      • Playing audio and particles
      • A simple text chat
    • How to network [genre]…
      • Racing
      • Turn-based
      • First-Person Shooter
      • MMO
      • Fighting
    • Video tutorials
  • Get started
    • Installation
    • Scene Setup
      • Sample UIs
    • Prefab setup: CoherenceSync
    • Testing locally
      • Tips and recommendations
    • coherence Cloud
      • Create a free account
      • Deploy a Replication Server
      • Share builds
  • coherence SDK for Unity
    • Components
      • CoherenceSync
      • CoherenceBridge
      • CoherenceLiveQuery
      • CoherenceTagQuery
      • Order of execution
    • Asset Management
      • Using CoherenceSyncConfig to instantiate GameObjects locally
      • CoherenceSyncConfigRegistry Save Modes
    • Networking State Changes
      • Supported types
      • Messaging with Commands
      • Syncing child GameObjects
      • Parenting network entities
        • Direct child CoherenceSyncs
        • Deeply-nested CoherenceSyncs
        • Nesting Prefabs at Edit time
      • Animation
      • CoherenceSync references
      • [Sync] and [Command] Attributes
      • [OnValueSynced] Attribute
      • Creating your own syncable member
      • Custom Component Actions
    • Baking (Code generation)
    • Scene Management
    • Authority
      • Authority transfer
      • Server-authoritative setup
    • Lifetime
      • Persistence
      • Example – a global counter
    • Optimization
      • Simulation Frequency
      • Areas of Interest
      • Level of Detail (LOD)
    • Profiling
    • Interpolation
    • Rigid Bodies
    • Settings
    • Simulation Frame
    • Replication Server
    • Simulators
      • Scripting: Client vs Simulator
      • Local Development
      • World Simulators
      • Room Simulators
      • Simulator Slugs
      • Multi-Room Simulators
      • Build and Publish
      • Command-line arguments
      • Load Balancing
    • Client-Hosting
    • Client Connections
    • Rollback Networking Support
    • World Origin Shifting
    • Offline gameplay
    • CLI
    • Upgrade Guide
      • Upgrade 1.0 -> 1.1
      • Upgrade 0.10 -> 1.0
      • Upgrade 0.9 -> 0.10
  • Hosting
  • coherence Cloud
    • Developer Portal
    • Dashboard
    • Worlds
    • Rooms
    • Lobbies
    • Game Services
      • Account
      • Key-Value Store
    • Using coherence Cloud in Unity
      • Worlds
      • Rooms
      • Lobbies
      • Game Services
        • Authentication Service (Player Accounts)
        • Key-value store
  • Schema explained
    • Overview
    • Specification
    • Field settings
    • Archetypes
  • coherence Scripting API
  • Additional resources
    • Community
    • Pricing
    • Quick Samples
    • Continuous Integration
    • Unreal Engine Support
    • WebGL Support
    • Peer-to-Peer Support (P2P)
    • Glossary
  • Credit cost & pricing
Powered by GitBook
On this page
  • Building an executable
  • ParrelSync
  • Best practices
  • Multiplayer Play Mode

Was this helpful?

Export as PDF
  1. Get started
  2. Testing locally

Tips and recommendations

Quicker iteration during development

Last updated 1 year ago

Was this helpful?

When developing multiplayer experiences you will need to run multiple instances of your game in order to test properly. You also need to make sure these instances can be restarted quickly, so you can iterate quickly.

coherence does not have a built-in solution for multi-client testing, but there are several options available to you, each with their own benefits and drawbacks.

Building an executable

The easiest method is to simply create a new build each time you want to test anything. You can launch any number of instances of that build, and have an instance running in the Editor as well.

Benefits

  • Easy to distribute amongst team members.

  • Well-understood workflow.

Drawbacks

  • Long iteration time as you need to continuously make builds.

  • Harder to debug the executables.

ParrelSync

is an open-source project which allows you to open multiple Unity Editor instances, all pointing to the same Unity project (using Symbolic links).

Benefits

  • Short iteration times.

  • Easy debug because it's possible to inspect GameObjects in multiple instances.

Drawbacks

  • Requires you to have multiple Unity Editors open.

Caveats

  • EditorPrefs are not consistently shared between Editors.

Best practices

  • Open ParrelSync -> Clones Manager. Create a new clone, and open it.

  • Continue development in the original Unity Editor. Never edit files in the clone Editors.

Multiplayer Play Mode

Unity has an experimental package called Multiplayer Play Mode (MPPM) available for 2023.1. As this is currently experimental, we do not officially recommend it - but it does show some promise and should be mentioned. This package allows a single Editor to run several instances of a game.

Benefits

  • Short iteration times.

  • No issues with schema incompatibility.

Drawbacks

  • Experimental.


All instances of the game must have identical schemas, so you might want to ensure you are using Assets rather than Source Generator so the netcode is synced across editors automatically. If you do intend to use Source Generator, you need to remember to bake in each open Unity Editor. In that case, it might make sense to enable Bake Automatically On Enter Play Mode in coherence settings. You can change both of these from the coherence Hub > Baking, or in Project Settings > coherence.

First, install the ParrelSync package as described in the .

When you need to test, ensure the netcode is for all editors.

ParrelSync
Installation Instructions
baked
MPPM Info
baking mode