A* Pathfinding for Multiplayer RTS

Unity is a bech because it uses imprecise floating point numbers for its physics engine. I have yet to find a solution to pathfinding over the network in a lock-step model (http://clintonbrennan.com/2013/12/lockstep-implementation-in-unity3d/).

Is there a way of using doubles or something more precise than floats to calculate paths? So that I can send 2 sets (start position and end position) of 3 doubles representing the x, y, and z axes over the network and get a path from those? Then Convert the path back to Vector3 so the unit can move with it; the important thing is that every path is the same.

Aron Granberg, I will honestly pay another $100 (metaphorically) if you can get this project to calculate the same path over the network. This is such an important task for many games.

Sorry for the late answer.

Regarding using doubles.
That is completely irrelevant unfortunately. Using doubles will not make it any more or any less predictable than using floats. It is still deterministic.

Floating point numbers are imprecise, but so are doubles, they just have a few more bits available. The physics system is nondeterministic since it does not use an absolutely fixed time step (I don’t think so anyway), but the pathfinding system should be deterministic in the results it calculates.

However that is assuming that you schedule the system with the same queries (obviously) and that you don’t do any graph updates in different orders on different machines.

I have not worked much with networking, but I would think that the best way to guarantee the same results would be to calculate the path and then send it over the network. It is not large, just 100 or so Vector3s, and they would not be sent very often, only when the path is recalculated.

Not sure what you mean by a metaphoric $100, but would not accept it anyway, I have honestly worked too little with networking to be sure that I could complete the task. I think that’s better done by someone who doesn’t have to learn game networking first and then implement the solution.

Many thanks for your answer, and I appreciate that you’re honest. I came up with a pseudo-deterministic solution which is sending the start position and end position to calculate the paths and snapping units to the start position on all clients. I’m using Unity’s native pathfinding, however, because of its crowd controlling but this solution works in general.