Scripting: Client vs Simulator
When scripting Simulators, we need mechanisms to tell them apart.
Am I a Simulator ?
Ask Coherence.SimulatorUtility.IsSimulator
.
using Coherence;
using UnityEngine;
public class SimulatorClass : 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
Connect
and ConnectionType
The Connect
method on Coherence.Network
accepts a ConnectionType
parameter.
using Coherence;
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 bridge = FindAnyObjectByType<CoherenceBridge>();
bridge.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.
Server-side simulation
You can define who simulates the object in the CoherenceSync inspector.
Connecting Simulators automatically to RS: AutoSimulatorConnection Component
coherence includes an auto-connect MonoBehaviour out of the box for Room- and World-based Simulators. The Component its called AutoSimulatorConnection.
When you add the Component, it will parse the connection data passed with Command-line arguments to connect to the given Replication Server automatically. This will also work for Simulators you upload to the coherence Cloud.
Was this helpful?