Manual Polling

Animancer Events and End Events are usually the simplest and most performant way to make things happen at specific times throughout an animation, but it can sometimes be useful to just get a reference to an AnimancerState (such as the one returned when calling AnimancerComponent.Play) and check its AnimancerState.Time or NormalizedTime every update. For example:

public class ManualPollingExample : MonoBehaviour
{
    [SerializeField]
    private AnimancerComponent _Animancer;

    [SerializeField]
    private AnimationClip _Animation;

    private AnimancerState _State;

    protected virtual void Awake()
    {
        _State = _Animancer.Play(_Animation);
    }

    protected virtual void Update()
    {
        if (_State.NormalizedTime >= 1)
            Debug.Log("Animation ended");
    }
}

The States page explains various other ways of getting a state.