This happened to me as I had separate bindings for being able to navigate in the menu (using WSAD), but also wanted to use WSAD as axis mappings for movement. I noticed it because my character started to stutter irregularly when trying to move.
It’s a rather nasty bug because it could happen easily (it’s not exactly something unusual to have menu mappings on WSAD), especially if the game supports rebinding of keys. If any user were to rebind any key to something that an axis mapping used, that axis mapping will become glitchy like this.
It’s also very strange, because Action Events should only happen once when the key is depressed or released, not every third frame, and it doesn’t seem to have anything to do with input priority.
Steps to reproduce:
Create ThirdPerson template
Add a Player Controller BP and change the Game Mode to use it
In the project settings, add an Action Mapping, call it for example “Menu Up” and set it to W
In the Player Controller BP, add the InputAction Menu Up Event
Just pull the wire and have it print Hello or something
(Bonus step): Go into the Character BP and printstring the InputAxis MoveForward Axis Value to the log. You’ll see that it will be 1.0 on some frames, and 0.0 on other frames.
You’ll notice that the character will stutter when moving.
One strange observation is that it seems to work properly if the MoveForward Axis Event is moved from the character and into the Player Controller.
I remember having this problem a while back, try clicking the action input event and you’ll find an option in the Details panel called “Consume Input”, it’s on by default, turn it off and try again.
Here’s a screenshot showing what i meant. Also it worked properly for you when you moved the movement logic to the Player Controller because there won’t be input priority clashes between different classes.
Thanks for the response, but I’ve already tried all variations of Consume Input and Override Parent Binding, as well as changing around the Input Priority, and nothing of the sort resolves this problem.
And from what I know, UE4 first checks for input mappings inside a possessed character and then if there’s none there, it checks the player controller (and after that the level blueprint). I think that’s what Consume Input affects, while Override Parent Binding works within the same class, so for example a child of Character could override its parent.
Interesting, you’re right! It does work now! I could swear that I tried this before and it didn’t work then. I must have done something wrong then. Thank you very much! I’ll mark the answer as accepted although I still think this is a bug, but your solution is a good one to work around the problem.