I think that yes you should do it. However maybe there is better way to make world moving.
So for creating moving actor:
- make new blueprint actor, name it BP_MovingParent
- add some debug mesh to it, (something that you can see in game)
- add boolean variable SeeDebug? make it editable per instance
- in construction script change visibility of that debug mesh to what is in SeeDebug?
Now Creating some children blueprint classes:
- crate child class for BP_MovingActor
- add there your game mesh, or multiple meshes, or even section of world outside train
When you have few of those moving actors sections, you can place them in level and work on moving logic.
best would be doing it with event dispatcher (so you have central place that manages all of them):
- create your custom game mode blueprint, set project settings to use that instead of defaults
- in game mode create dispatcher. like DISPATCHER_MOVE
- in BP_MovingParent get game mode assign to dispatcher
- Now add logic for moving when dispatcher is called. You can use just event, or you can give vector trough dispatcher.
- you can also use linear interpolate on tick in parent actor on tick, and use dispatcher to set new targets like speed or direction.