LogoLogo
⚠️ Outdated documentationGo to LatestHomeAPI
SDK 0.7.4
SDK 0.7.4
  • Welcome
  • Overview
    • What is coherence?
    • How does coherence work?
    • Features and Roadmap
    • Rooms and Worlds
    • Requirements
  • Get Started
    • Install coherence
    • Scene setup
    • Prefab setup
    • Build and run
    • Baking and code generation
    • Create a free account
    • Deploy replication server
    • Share builds
  • Authority and communication
    • How authority works
    • Authority transfer
    • Commands / Messages
    • Client messages
    • Server-side and input queues
    • Input prediction and rollback
    • Animations
  • Persistence
    • Overview
    • Configuring persistence
    • Storage
    • Example – A global counter
  • Optimization
    • Overview
    • Simulation frequency
    • Areas of interest
    • World size
    • Level of detail
    • Interpolation
    • Extrapolation
  • Connected entities
    • Overview
    • Entity references
    • Parent-child relationships
    • CoherenceNode
  • Simulators
    • Overview
    • Client vs. simulator logic
    • Build and deploy
    • Simulator load balancing
    • Room Simulators
    • World Simulators
    • Simulator Slugs
    • Testing Simulators Locally
  • Tutorial project
    • Get the Tutorial Project
    • Start Tutorial
      • 1. Transforms
      • 2. Physics
      • 3. Persistence
      • 4. Animation and Variables
      • 5. AI Navigation
      • 6. Network Commands
      • 7. Team based
      • 8. Connected Entities
  • Game Services
    • Game account
    • Key-value store
    • Matchmaking
  • Developer Portal
    • Overview
    • Dashboard
    • Enabling Game Services
    • Configure Rooms
    • Manage Worlds
  • API reference
    • Network SDK
      • CoherenceSync
      • MonoBridge
      • LiveQuery
      • Archetype
      • Sample UI
      • Settings Window
      • Custom Bindings (Advanced)
      • PlayResolver
      • Rooms
      • Worlds
    • Cloud API
      • API tokens and keys
      • Game account
      • Key-value store
      • Matchmaking
    • Replication Server
    • Simulation Server
  • Schema reference
    • Overview
    • Specification
    • Field Settings
    • Archetypes and LOD-ing
  • Resources
    • Downloads
    • SDK Update Guide
    • Video Tutorials
    • Glossary
    • CLI Utilities
    • Simulator CLI arguments
    • Helper Scripts
    • Troubleshooting
  • Community
    • Discord
  • Additional information
    • Pricing
    • SLA
    • Unreal Engine support
    • WebGL
    • Peer-to-Peer (P2P)
    • Known Issues
    • Changelog
Powered by GitBook
On this page
  • Am I a simulator?
  • Server-side simulation
  • Auto-reconnect

Was this helpful?

Export as PDF
  1. Simulators

Client vs. simulator logic

When scripting simulators, we need mechanisms to tell them apart.

Am I a simulator?

Ask Coherence.SimulatorUtility.IsSimulator.

using Coherence;

if (SimulatorUtility.IsSimulator)
{
    // I'm a simulator!
}

There are a few ways you can tell coherence if the instance should behave as a simulator:

  • Specifying a ConnectionType when connecting via Coherence.Network.Connect.

  • COHERENCE_SIMULATOR preprocessor define.

  • --coherence-simulation-server command-line argument.

  • Toggling on Simulator in the sample connection dialog.

Connect and ConnectionType

The Connect method on Coherence.Network accepts a ConnectionType parameter.

using Network = Coherence.Network;
using ConnectionType =Coherence.Connection.ConnectionType;

public class ConnectAsSimulator : MonoBehaviour
{
    void Start()
    {
        if (Network.Connect("127.0.0.1:32001", ConnectionType.Simulator))
        {
            // Connection successful
        }
        else 
        {
            // Connection failed
        }
    }
}

COHERENCE_SIMULATOR

#if COHERENCE_SIMULATOR

// simulator-specific code

#endif

Whenever the project compiles with the COHERENCE_SIMULATOR preprocessor define, coherence understands that the game will act as a simulator.

Command-line argument

Launching the game with --coherence-simulation-server will let coherence know that the loaded instance must act as a simulator.

You can supply additional parameters to a simulator that define its area of responsibility, e.g. a sector/quadrant to simulate entities in and take authority over entities wandering into it.

You can also build a special simulator for AI, physics, etc.

Server-side simulation

You can define who simulates the object in the CoherenceSync inspector.

Automatic simulator adoption of CoherenceSync objects is work in progress and will be available in one of the future releases of coherence.

Auto-reconnect

If the simulator is invoked with the --coherence-play-region parameter, AutoReconnect will try to reconnect to the server located in that region.

If you need a different solution, take a look at its implementation use plug your own.

Last updated 3 years ago

Was this helpful?

The provided includes auto-reconnect behaviour out of the box for simulators. The root GameObject has an AutoReconnect component attached to it.

sample UI
The custom build pipeline lets us define preprocessor defines like COHERENCE_SIMULATOR
AutoReconnect in the sample UI