Too much of questions for you, and too much of answers to type,
- are players shares the same “world” (they can meet each other) or each have individual one (they can never meet each other)?
- should the other players know anything about my pawn?
- what is “a lot of players” in your understanding? 5? 20? 100?
- what is a
Tile
in your game? a dozen of sprites? a quad with a pair of low-poly meshes? a landscape section with a hundred of high-poly meshes? - do you store some kind of
map
in your game? if player move left-right, will the tiles spawned on the second step will be the same as the ones removed on the first step? - do you planning to host a dozens of dedicated servers in a cloud, or your goal is desktop-only game?
Those will make it easier to make a better recommendations about your architecture.
Without this info, i can only clarify your concern:
My concerns are the collision. The server will try to fix the client position as it doesn’t know the platform collision which is owned by the client. Can i outplay this or not worth to implement it?
The server will try to fix the client position only if you using ACharacter
(which handle movement replication by UCharacterMovementComponent
) for your pawn. Depending on what you want from your pawn you could consider using a plain APawn
with custom movement replication (it’s easy for turn-based game, but for realtime ACharacter
is a good choice to start from).
If you have custom movement replication - you may manipulate by all the “server fixes” being made;
if you using ACharacter
with CMC
- the CMC
have an option bIgnoreClientMovementErrorChecksAndCorrection
. It have its drawbacks in the form of having no corrections, but depending on your game it maybe the thing you need.
On the other hands, if you using bIgnoreClientMovementErrorChecksAndCorrection
permanently that means you kinda don’t need movement replication ->you don’t need ACharacter
→ you have no problems with any collisions.
CMC
also have bServerAcceptClientAuthoritativePosition
that will make a server to use a client’s calculations instead, but the drawback in this case is that you basically allows cheating, but, again, depending on the game it’s may be okayish approach