# Animations

{% hint style="info" %}
coherence doesn't replicate Animator state, but its parameters. Latency can create scenarios where different clients reproduce different animations. Take this into account when working with Animator Controllers that require precise timings.
{% endhint %}

Unity Animator's parameters are bindable out of the box, with the exception of triggers.

![Speed and Pose parameters are available bindings on CoherenceSync](/files/-M_Q5E3O7LUA3G-eObV0)

### Triggers

Triggers can be invoked over the network using [commands](/0.4.14/authority/commands.md) and [events](broken://pages/-MYOiFgzwqMr4bcgd4Wz). Here's an example where we inform networked clients that we have played a jump animation:

```csharp
using UnityEngine;
using Coherence.Toolkit;
using System.Collections.Generic;

public class JumpController : MonoBehaviour
{
    static List<CoherenceSync> instances = new List<CoherenceSync>();

    CoherenceSync coherenceSync;
    Animator animator;

    void Awake()
    {
        coherenceSync = GetComponent<CoherenceSync>();
        animator = GetComponent<Animator>();
    }

    void OnEnable()
    {
        instances.Add(coherenceSync);
    }

    void OnDisable()
    {
        instances.Remove(coherenceSync);
    }

    void Update()
    {
        if (!coherenceSync.isSimulated)
        {
            return;
        }

        if (Input.GetKeyDown(KeyCode.Space))
        {
            MakePlayerJump();
        }
    }

    void MakePlayerJump()
    {
        animator.SetTrigger("Jump");
        // TODO move your character up
        NotifyJumpOverNetwork(coherenceSync);
    }

    // bind to this method via the Bindings window
    public void PlayJumpAnimation(CoherenceSync target)
    {
        var animator = target.GetComponent<Animator>();
        animator.SetTrigger("Jump");
    }

    void NotifyJumpOverNetwork(CoherenceSync whoJumped)
    {
        foreach (var s in instances)
        {
            if (!s || s == whoJumped)
            {
                continue;
            }

            s.SendCommand("JumpController.PlayJumpAnimation", whoJumped);
        }
    }
}
```

{% hint style="info" %}
Since we don't have support for events yet, here we use [command broadcasting](/0.4.14/authority/commands.md#broadcasting-commands) and entity references to notify other clients about our entity performing a jump.
{% endhint %}

Now, bind to `PlayJumpAnimator`.

![](/files/-M_QKOcnmDWuK7HXrVY0)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.coherence.io/0.4.14/authority/animation.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
