I would recommend to do the movement in Tick, and just store a target move rate when input triggers.
You also want to scale your move rate by the delta time before applying it, to reduce the effect of frame rate.
Try something like this (adjust your -50 as required, it should be the desired cm/sec):
You could also use a curve, various ways to go about that but I would use a very similar solution to the above, remove the scaling in the input trigger (so target is -1 → 1, and define your curve over the same range and with values also in that range), change FInterpTo to FInterpToConstant and reduce the Interp rate (significantly, to a small fraction of 1) and after the FInterpToConstant evaluate your curve and multiply that by your desired move rate and the time delta.
The first way (started/completed) works better it seems, the second one glitches a bit.
I do notice though that in this setup, the speed of the movement is fixed.
So if I move the joystick quickly to one direction, it will move fast, but it won’t slow down if I move it to 50% or so. If I start moving it slowly, it will move slow but won’t speed up if I boost it to 100%.
I understand why it’s behaving this way but not sure how to keep the movement sensitivity.
My bad again Using Started and Completed we are only capturing the first value we see and then resetting to 0 when there is no input. So we fixed one problem and introduced another (not updating anymore as the input varies), hook it back up to Triggered, and disconnect the Started if you like (won’t matter either way, but isn’t needed with Triggered back in the mix).
Does it mean that every value I want to smooth this way, needs 2 extra variables for this process?
I am wondering if there’s a shortcut, since I have about 10 places with this setup and each one has 3 joystick controls.
Probably can’t help streamline though, no simpler way comes to mind. You could wrap the functionality up in some reusable object, but there is nothing in Blueprint that allows functionality and is sufficiently lightweight to recommend. In C++ a struct would do fine, unfortunately structs in BP can not have functionality so you would be forced to use either objects or components, which are very heavy handed solutions for what we doing here.