Client vs Simulator logic

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

Am I a Simulator ?

Ask Coherence.SimulatorUtility.IsSimulator.

using Coherence;
using UnityEngine;

public class SimualatorClass : MonoBehaviour
{
    public void Awake()
    {
        if (SimulatorUtility.IsSimulator)
        {
            // I'm a simulator!
        }
    }
}

There are two ways you can tell coherence if the game build should behave as a Simulator:

  • COHERENCE_SIMULATOR preprocessor define.

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

Connect and ConnectionType

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

using Coherence;
using Coherence.Common;
using Coherence.Connection;
using Coherence.Toolkit;
using UnityEngine;

public class ConnectAsSimulator : MonoBehaviour
{
    void Start()
    {
        var endpoint = new EndpointData
        {
            region = EndpointData.LocalRegion,
            host = "127.0.0.1",
            port = 32001,
            schemaId = RuntimeSettings.instance.SchemaID,
        };

        var monoBridge = FindObjectOfType<CoherenceMonoBridge>();
        monoBridge.Connect(endpoint, ConnectionType.Simulator);
    }
}

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.

Auto-reconnect

The sample UI provided includes auto-reconnect behaviour out of the box for Room- and World-based simulators. The root GameObject has AutoReconnect components attached to it.

Multi-Room Simulators have their own per-scene reconnect logic. The AutoReconnect components should not be enabled when working with Multi-Room Simulators.

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

Last updated