Keeping player at zero coordinates

I have a infinite runner game. Player is CharacterController.

As I understand I need to keep player at zero coordinates all the time, moving the world, not the player. Is it right? If so, what is the best way to implement it? Is there any common scenarios?

Personally, I would go about it like this. It may not be the best method but in theory it should work the way I think you’re wanting it to work. Like temple run?

I would break parts of the environment/path into segments (that you create in other programs to design the environment) and then instantiate each part at runtime one after another (random selection or with some logical order to it). With this, you can continue forever as the player will traverse over the newly created parts as it creates new environments ahead of them. To clean up the environment (which you’ll need to do) just destroy the old parts when the player exits that segment.

That’s the basic idea. Keep the size of the segments small so you can get diversity in the environment.