Do we still need to poll Update() for actions that provide their value every frame?

I was hoping the new input system would mark an end to polling in Update() but using events I’m only able to trigger an action a few times (started, performed, released?). If I was to hold down the W key I’d expect to update the player’s Vector2 moveAmount variable every frame for as long as it’s held.

This is what I have:

{
Vector2 moveAmount = playerInput.actions["Move"].ReadValue<Vector2>();
...
}```

Is this the intended workflow? It doesn't feel like much of an upgrade from using Input.GetAxis() (and requires an extra reference to a PlayerInput) but I'm fully prepared to be told that I'm missing something obvious.

Thanks for any help :)

EDIT: It had not occurred to me that the Vector2 value on release would be (0,0) and set moveAmount as such. So it's only a matter of keeping track of moveAmount as a member variable. I got confused during migration, seems obvious now!

You can get a reference to an InputAction using [SerializedField] private InputActionReference myReference;

Then myReference.action.ReadValue…

No more magic strings, way more efficient. You don’t HAVE to poll, but for something like movement, I’m doing it, and for “events” like a button press I’m using the Callbacks of PlayerInput