First of all, being the server simulation “tick” based, using NetworkTick as a measure of the elapsed time it is most correct and simple things to do.
As you already discovered, DeltaTime = (TickB-TickA)/SimulationTickRate.
Predicting all the players and the enemy can be indeed costly, but unless you have hundred of them in close combat , you should be good in term of CPU costs. I don’t think you are going to be CPU bound for this, but indeed it add cost, that can be used instead for other things.
As Niki suggested, using prediction switching is the way to go in this case for two reason:
- Far players ad enemy will look just nice and fine
- Close combat will then work and be reactive.
In term of what can make the prediction loop slow, I think one thing can be the interaction of animation with the simulation and the fact you may want to use root motion as well.
That would imply, the animation should run as part of the prediction group (ticked manually) and that in turn may prevent to use burst. I would strongly suggest to avoid using Animator for that (in my experience with souls-like style game) and focusing on Playable, that give some better options (and scalability and speed).
The real problem in general would be the interaction with the players and what you expect from it. Even with prediction, you still need to account the fact that
- Snapshot can be lost
- Ability activation can be hardly predicted, unless ability auto-kick in. If they are activated by user actions, you will anyway end-up noticing that only when the server will send you the snapshot that contains that information.
By using remote player input prediction (input sent to all players) with the default settings, you only a couple of tick (usually the slack, so by default 2) of future player input you can exploit to trigger abilities for the remote players, but it is just a very little margin. Also, if some snapshot are lost, you may still end-up losing the player action trigger at the right tick.
However, if the activation of an ability is masked by some animation on the client, so the ability start X frame in the future after a key press for example, this give another margin to make it possible to have some anticipatory action on the remote players.