I think I know why. My tank has some problem moving and while debugging I also came across this code change, which made things worse.
Because we have four events in the Tank_BP calling the SetThrottle() function (IntendMoveForward and IntendMoveRight, which call the TankMovementComponent and then call the SetThrottle() function with the ‘Throw’. The other two I left in from the conventional handling (vs. fly-by-wire) which are ThrottleLeftTrack and ThrottleRightTrack, they are calling the SetThrottle() function directly with the axis value.)
These four events (or two events in the case you deleted the conventional handling as done during the course) are calling the SetThrottle() function kind of every frame with an input between -1 and +1. If that event doesn’t have any input (e.g. only intending to move forward or only intending to turn) then the event will still call the SetThrottle() function but will pass on a value of 0 and therefore setting the Member variable CurrentThrottle to zero.
So with
CurrentThrottle = FMath::Clamp(Throttle,-1,1);
it can happen that the CurrentThrottle is set to , lets say, +1, but before calling DriveTrack() in the OnHit() function, the CurrentThrottle is already set to 0 again by another function calling SetThrottle() the same frame.
Using
CurrentThrottle = FMath::Clamp(CurrentThrottle + Throttle,-1,1);
will not replace CurrentThrottle, but add to it. So any value that ever has been assigned to it, will stay and add up. Calling the SetThrottle function with a value of zero will not erase it, but just not change the current exisiting value of CurrenThrottle, until it is reset by
CurrentThrottle = 0;
AFTER calling the DriveTrack() function.