Input system interface method not updating every frame!

So I have a weird problem I’m not sure if its a bug or just my implementation. I’ll post a gif that may help to outline the problem more clearly than just words.


See how the sphere stays pretty much accurate and the square deviates away, they are both receiving the same input the left analog stick but using two different systems and different methods.

The sphere is using the below code, which is the accurate and correct output.

public partial class TestInputSyst : SystemBase
{
    private PlayerInputActions inputstuff;
    GameObject TheTestInpObj;

    float CursorMoveSpeed;

    protected override void OnCreate()
    {
        inputstuff = new PlayerInputActions();
        inputstuff.Enable();
    }

    protected override void OnStartRunning()
    {
        TheTestInpObj = GameObject.Find("TestInputObject");
        CursorMoveSpeed = 20;
    }

    protected override void OnUpdate()
    {
        var someval = inputstuff.PlayerControls.DirectionalControls.ReadValue<Vector2>();

        var currentmovpos = someval * CursorMoveSpeed * Time.DeltaTime;

        if (someval.magnitude > 0)       
        {
            Vector3 tempcurr = new Vector3(currentmovpos.x, 0, currentmovpos.y);
            TheTestInpObj.transform.position += tempcurr;
        }
    }

}

The square thing is using the below method derived from the interface class.

public partial class PlayerInputStuffSystem : SystemBase, PlayerInputActions.IPlayerControlsActions
{

//This method does not update every frame hence why I get the above glitch or error.
public void OnDirectionalControls(InputAction.CallbackContext context)
    {       
        inputdirection = context.ReadValue<Vector2>();

        Debug.Log("The actual input is " + inputdirection);
    }

I’ve also set in project settings for the input system to DynamicUpdates. I think the method might still be using FixedUpdate but I’m not sure how or if its possible to change it or if its a bug or just maybe I messed something up somewhere.

So just a slight update I tried creating a new input system by copying a Unity sample almost exactly. Code is below.

[AlwaysUpdateSystem]
[UpdateInGroup(typeof(InitializationSystemGroup))]
public partial class PlayerInputGatherSystem : SystemBase, PlayerInputActions.IPlayerControlsActions
{
    float2 inputMove;
    float2 inputLook;
    bool inputFire;
    bool startfield;
    bool addlayer;
    bool Calcotherlayer;
    float2 inputdirection;

    PlayerInputActions m_InputActions;   

    EntityQuery PlayerinputQuery;

    protected override void OnCreate()
    {
        m_InputActions = new PlayerInputActions();
        m_InputActions.PlayerControls.SetCallbacks(this);    

        PlayerinputQuery = GetEntityQuery(typeof(PlayerInput));
    }

    protected override void OnUpdate()
    {
        if (!HasSingleton<PlayerInput>())
            return;

        PlayerinputQuery.SetSingleton<PlayerInput>(new PlayerInput
        {
            Addlayer = addlayer,
            Calcotherlayer = Calcotherlayer,
            CursorPos = inputMove,
            DirectionInput = inputdirection,
            fireinput = inputFire ? true : false,           
            StartFloofeld = startfield
        });
        inputFire = false;
    }

    protected override void OnStartRunning()
    {
        if (HasSingleton<PlayerInput>()) return;

        EntityManager.CreateEntity(typeof(PlayerInput));
        m_InputActions.Enable();
    }

    protected override void OnStopRunning() => m_InputActions.Disable();

    void PlayerInputActions.IPlayerControlsActions.OnDirectionalControls(InputAction.CallbackContext context) => inputdirection = context.ReadValue<Vector2>();
    void PlayerInputActions.IPlayerControlsActions.OnCursorPosition(InputAction.CallbackContext context) => inputMove = context.ReadValue<Vector2>();
    void PlayerInputActions.IPlayerControlsActions.OnFire(InputAction.CallbackContext context) { if (context.started) inputFire = true; }
    void PlayerInputActions.IPlayerControlsActions.OnStartFlowfield(InputAction.CallbackContext context) { startfield = context.started ? startfield = true : startfield = false; }
    void PlayerInputActions.IPlayerControlsActions.OnAddNewLayer(InputAction.CallbackContext context) { addlayer = context.started ? addlayer = true : addlayer = false; }
    void PlayerInputActions.IPlayerControlsActions.OnCalcOtherLayer(InputAction.CallbackContext context) { Calcotherlayer = context.started ? Calcotherlayer = true : Calcotherlayer = false; }
   
}

And I get the same laggy not responsive controls as in the gif. In fact it feels even less responsive and wildly out of control. So most likely a bug?

Could this be due to the input not exceeding the dead zone on certain frames? Not sure if the first method respects the dead zone since you are polling instead of waiting for an event, although I feel like that would be a bug.

I don’t think its an issue with the dead zones I’ve tried messing with the both the inner and outer dead zone and its no different.

I’ve also used the GamepadVisualizer and it seems there’s no lack of events being sent, although maybe there isn’t enough, because the dots seems sparsely located but I don’t know if that’s how its supposed to look.

I’m at loss. I guess I’ll have to stop using analog controls for the time being.