[Sync] and [Command] Attributes

Aside from configuring your CoherenceSync bindings from within the Configure window, it's possible to use the [Sync] and [Command] C# attributes directly on your scripts. Your Prefabs will get updated to require such bindings.

Sync Attribute

Mark public fields and properties to be synchronized over the network.

[Sync]
public int health;

It's possible to migrate the variable automatically, if you decide to change its definition:

[Sync("health")]
public float hp;

If a variable is never updated after it is first initialized, it can be flagged to only be synchronized when the GameObject is created. This will improve performance, as coherence won't need to continually sample its value for changes like it would normally do.

[Sync(DefaultSyncMode = SyncMode.CreationOnly)]
public Color teamColor;

Command Attribute

Mark public methods to be invoked over the network. Method return type must be void.

[Command]
public void Heal(int amount)
{
    ...
}

It's possible to migrate the command automatically, if you decide to change the method signature:

[Command("Heal", typeof(int))]
public void IncreaseHp(float hp)
{
    ...
}

Command Meta

Commands can include metadata by setting UseMeta = true. This allows access to timing and sender information:

[Command(UseMeta = true)]
public void CommandWithMeta()
{
    if (CoherenceSync.TryGetCurrentCommandMeta(out var meta))
    {
        // Access frame timing and sender information
        Debug.Log($"Frame: {meta.Frame}, Sender: {meta.Sender}");
    }
}

For more details on using command metadata, see Command Meta.

Last updated

Was this helpful?