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.
The custom build pipeline lets us define preprocessor defines like COHERENCE_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

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.
AutoReconnect in the sample UI
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.
Export as PDF
Copy link
Edit on GitHub
Outline
Am I a Simulator ?
Server-side simulation
Auto-reconnect