Hi David,
There’s different walks for different purposes.
By far the most common for game engines is the in-place walk. Then the character’s root is animated in the game engine to take care of the translation.
Another way is to actually translate the character forward – which is more common outside of the game engine.
There is actually a 3rd way – where you animate the character translating forward, but also animate the root control translating backwards.
That way you actually have an in-place walk, but if you mute the root translation, you also have a translating walk.
(I only learned that trick a few years ago)